オプショナル値のサブスクリプトから値を取得、設定しようとするため、およびサブスクリプトの呼び出しが成功するかを確認するためにオプショナルチェーンを利用することができます。
次の例では、Residence
クラスに定義されたサブスクリプトを使用して、john.residence
プロパティの rooms
配列にある最初の部屋の名前を取り出そうとしています。john.residence
は nil
であるため、サブスクリプトの呼び出しは失敗します。
if let firstRoomName = john.residence?[0].name {
print("The first room name is \(firstRoomName).")
} else {
print("Unable to retrieve the first room name.")
}
// "Unable to retrieve the first room name." と出力
john.residence
がオプショナルチェーンされるオプショナル値であるため、このサブスクリプトの呼び出しにあるオプショナルチェーンのクエスチョンマークは、サブスクリプトの角括弧の前で、john.residence
の直後に置かれています。
同じようにして、オプショナルチェーンでサブスクリプトに新しい値を設定することができます。
john.residence?[0] = Room(name: "Bathroom")
residence
は nil
であるため、このサブスクリプトの設定も失敗します。
Residence
インスタンスを生成して john.residence
に代入し、rooms
配列に 1 以上の Room
インスタンスを追加した場合には、オプショナルチェーンで Residence
のサブスクリプトを使用して rooms
配列にある項目にアクセスすることができます。
let johnsHouse = Residence()
johnsHouse.rooms.append(Room(name: "Living Room"))
johnsHouse.rooms.append(Room(name: "Kitchen"))
john.residence = johnsHouse
if let firstRoomName = john.residence?[0].name {
print("The first room name is \(firstRoomName).")
} else {
print("Unable to retrieve the first room name.")
}
// "The first room name is Living Room." と出力
オプショナル型のサブスクリプトにアクセス
Swift の Dictionary
型のキーのサブスクリプトのように、サブスクリプトがオプショナル型の値を返す場合、オプショナルの戻り値をチェーンするためにサブスクリプトの閉じ角括弧の後にクエスチョンマークを置きます。
var testScores = ["Dave": [86, 82, 84], "Bev": [79, 94, 81]]
testScores["Dave"]?[0] = 91
testScores["Bev"]?[0] += 1
testScores["Brian"]?[0] = 72
// "Dave" 配列は [91, 82, 84] で、"Bev" 配列は [80, 94, 81]
この例では、String
キーと Int
値の配列を対応させたキーバリュー 2 組を含む辞書 testScores
を定義しています。オプショナルチェーンを利用して、"Dave"
に対応する配列の最初の項目に 91
を設定し、"Bev"
に対応する配列の最初の項目に 1 加算し、"Brian"
のキーに対応する配列の最初の項目に設定しようとしています。辞書 testScores
は "Dave"
と "Bev"
のキーを含んでいるため、初めの 2 つの呼び出しは成功しています。辞書 testScores
には "Brian"
のキーは含まれていないため、3 つ目の呼び出しは失敗しています。
Portions of this page are translations based on work created and shared by Apple and used according to terms described in the Creative Commons Attribution 4.0 International License.