JavaラーニングSwift-オプションチェーンコール(Optional Chaining)と照合
オプションチェーン呼び出し(Optional Chaining)は、現在の値がnilのオプション値である可能性がある属性、メソッド、および下付きを要求および呼び出す方法です.オプションの値に値がある場合、呼び出しは成功します.オプション値がnilの場合、呼び出しはnilを返します.複数の呼び出しを接続して1つの呼び出しチェーンを形成することができ、いずれかのノードがnilである場合、呼び出しチェーン全体が失敗し、nilを返します.
swiftという機能はよく設計されており、ポインタ異常を報告することはありません.Javaであれば、そのコーナーのオブジェクトが空であれば、ポインタ異常を報告し、プログラム異常が終了し、swiftはできません.直接nilに戻るので便利です.
呼び出したいプロパティ、メソッド、または下付きのオプション値の後ろに疑問符(?)を置くことで、オプションチェーンを定義できます.
residenceがnilであっても異常は報告されず、elseの分岐に入るので簡単です.
オプションのチェーン呼び出しによるアクセス属性
オプションのチェーン呼び出しによる呼び出し方法
オプションのチェーンコールで下付き文字にアクセス
オプションタイプの下付き文字にアクセス
接続マルチレベルオプションチェーンコール
複数のオプションチェーン呼び出しを接続することで、プロパティ、メソッド、および下付きラベルにアクセスできます.ただし、多層オプションチェーン呼び出しでは、戻り値のオプションレベルは増加しません.
つまり、アクセスした値がオプションでない場合、オプションチェーンコールはオプション値を返します. アクセスした値がオプションである場合、オプションチェーン呼び出しはオプション戻り値を「よりオプション」にしません.
メソッドのオプション戻り値でオプションチェーン呼び出しを行う
swiftという機能はよく設計されており、ポインタ異常を報告することはありません.Javaであれば、そのコーナーのオブジェクトが空であれば、ポインタ異常を報告し、プログラム異常が終了し、swiftはできません.直接nilに戻るので便利です.
呼び出したいプロパティ、メソッド、または下付きのオプション値の後ろに疑問符(?)を置くことで、オプションチェーンを定義できます.
if let roomCount = john.residence?.numberOfRooms {
print("John's residence has \(roomCount) room(s).")
} else {
print("Unable to retrieve the number of rooms.")
}
residenceがnilであっても異常は報告されず、elseの分岐に入るので簡単です.
オプションのチェーン呼び出しによるアクセス属性
let someAddress = Address()
someAddress.buildingNumber = "29"
someAddress.street = "Acacia Road"
john.residence?.address = someAddress
オプションのチェーン呼び出しによる呼び出し方法
if john.residence?.printNumberOfRooms() != nil {
print("It was possible to print the number of rooms.")
} else {
print("It was not possible to print the number of rooms.")
}
オプションのチェーンコールで下付き文字にアクセス
john.residence?[0] = Room(name: "Bathroom")
オプションタイプの下付き文字にアクセス
var testScores = ["Dave": [86, 82, 84], "Bev": [79, 94, 81]]
testScores["Dave"]?[0] = 91
testScores["Bev"]?[0]++
testScores["Brian"]?[0] = 72
接続マルチレベルオプションチェーンコール
複数のオプションチェーン呼び出しを接続することで、プロパティ、メソッド、および下付きラベルにアクセスできます.ただし、多層オプションチェーン呼び出しでは、戻り値のオプションレベルは増加しません.
つまり、
メソッドのオプション戻り値でオプションチェーン呼び出しを行う
if let beginsWithThe =
john.residence?.address?.buildingIdentifier()?.hasPrefix("The") {
if beginsWithThe {
print("John's building identifier begins with \"The\".")
} else {
print("John's building identifier does not begin with \"The\".")
}
}