これらのマークに使用される用語は です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
配置すると、ラップを解除する値がないため、ランタイム エラーがトリガーされます。residence
residence
let roomCount = john.residence!.numberOfRooms
// this triggers a runtime error
上記のコードは、値が nil 以外の場合に成功しjohn.residence
、適切な部屋数を含む値に設定さroomCount
れます。ただし、上記のように、がの場合Int
、このコードは常に実行時エラーを引き起こします。residence
nil
オプションの連鎖は、 の値にアクセスする別の方法を提供します
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
の値を取得するように指示します。numberOfRooms
residence
アクセスの試行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 についての見通しが得られることを願っています。