これらのマークに使用される用語は ですOptional Chaining。それらは通常、ケースを区別するために使用さpropertyれmethod callますnil。
Apple の言語ガイドでOptional Chaining説明されている例は、その使用目的を示すのに適しています。
Personまず、とという 2 つのクラスResidenceが定義されます。
class Person {
var residence: Residence?
}
class Residence {
var numberOfRooms = 1
} Residence instances have a single `Int` property called `numberOfRooms`, with a default value of **1**. `Person` instances
タイプ?のオプションのresidenceプロパティがあります。Residence
新しいPersonインスタンスを作成すると、オプションであるため、そのresidenceプロパティはデフォルトで に初期化さnilれます。以下のコードでjohnは、 のresidenceプロパティ値は次のnilとおりです。
let john = Person()
numberOfRoomsこの人物の のプロパティ
にアクセスしようとする場合、その値のラップ解除を強制するために感嘆符を後にresidence配置すると、ラップを解除する値がないため、ランタイム エラーがトリガーされます。residenceresidence
let roomCount = john.residence!.numberOfRooms
// this triggers a runtime error
上記のコードは、値が nil 以外の場合に成功しjohn.residence、適切な部屋数を含む値に設定さroomCountれます。ただし、上記のように、がの場合Int、このコードは常に実行時エラーを引き起こします。residencenil
オプションの連鎖は、 の値にアクセスする別の方法を提供します
numberOfRooms。オプションの連鎖を使用するには、感嘆符の代わりに疑問符を使用します。
if let roomCount = john.residence?.numberOfRooms {
print("John's residence has \(roomCount) room(s).")
} else {
print("Unable to retrieve the number of rooms.")
}
// Prints "Unable to retrieve the number of rooms."
これは、Swift にオプションのプロパティで「<strong>チェーン」を指定し、存在する場合residenceの値を取得するように指示します。numberOfRoomsresidence
アクセスの試行numberOfRoomsは失敗する可能性があるため、オプションの連鎖試行は type の値Int?、つまり「<strong>optional Int」を返します。residenceがの場合nil、上記の例のように、このオプションIntも になりnil、 にアクセスできなかったという事実を反映しますnumberOfRooms。オプションInt
のバインディングを介してオプションにアクセスし、整数をアンラップしてオプションではない値をroomCount変数に割り当てます。
numberOfRoomsはオプションではありませんが、これは真であることに注意してください
Int。オプションのチェーンを介してクエリされるという事実は、 への呼び出しnumberOfRoomsが常にInt?ではなく を返すことを意味しIntます。
Residenceインスタンスをに割り当てて、値john.residenceを持たないようにすることができます。nil
john.residence = Residence()
上記の Optional Chaining の一般的な概要に加えて、StackOverflowでこの回答を見ることができます。
これにより、Optional Chaining についての見通しが得られることを願っています。