2

この質問がここにあることは承知していますが、私の質問への回答は部分的にしかなく、回答についてコメントできないため、ここに投稿せざるを得ません。

オプションのバインディングと単に ? を使用することの違いは何ですか。私の理解は、あなたが使用するときですか?変数のラップを解除するには、変数に nil 値が含まれている場合、それが使用されているコードは実行されません。(そうでない場合は訂正してください。)

4

1 に答える 1

10

変数が ではない場合にのみ実行するコード ブロックがある場合は、オプションの binding ( )を使用します。if letnil

オプションの連鎖( ?) は、オプションの変数のプロパティ/メソッドにアクセスする場合にのみ使用します。

しかし、オプションの連鎖が不可能な状況があります (つまり、オプション変数のプロパティ/メソッドにアクセスしているのではなく、その変数を他の目的に使用している場合など)。例えば

// let's assume `data` is a `NSData?` optional

if let imageData = data {
    let image = UIImage(data: imageData)

    // now do something with `image`
}

これを行うのは、このコンテキストではオプションの連鎖を使用できないためlet image = UIImage(data: data!)です。datanil

于 2015-11-18T00:07:21.357 に答える