オプションの変数について説明する記事がいくつかあります。Swiftオプション値の明確化の使用
しかし、この種の例ではまだわかりません。
var metadata: AnyObject?
metadata = .......
metadata?.getValue
metadata!.getValue
メタデータ?とメタデータ!、どちらもランタイムエラーなしで動作しています。 誰もその違いについて説明できますか?
オプションの変数について説明する記事がいくつかあります。Swiftオプション値の明確化の使用
しかし、この種の例ではまだわかりません。
var metadata: AnyObject?
metadata = .......
metadata?.getValue
metadata!.getValue
メタデータ?とメタデータ!、どちらもランタイムエラーなしで動作しています。 誰もその違いについて説明できますか?
あなたの例でメタデータが実際にはnilの場合、それらの違いはより明確になります。
このコードでは、4行目がクラッシュしますが、3番目の行はクラッシュします。 ?
オペレータはオプションのチェーンを作ることを可能にするのに対し、あなたはそれについての詳細を読みたい場合!
オペレータは、変数をアンラップので、これは、あなたが他の有用なオペレータはあなたの例では、??
あることhere
を行うことができ、あります
metadata ?? "Another description"
式の左辺がnilの場合は、右辺を返します。特定の状況下では便利です。 2016年8月10日コメントの後
編集: が??
は、オペレータを合体nilをと呼ばれ、それは二項演算子です。最初の引数はオプションの型でなければなりません。最初の引数が安全にラップ解除できないかどうかをチェックし、成功した場合はラップ解除された値を返します。最初の値がnilの場合、2番目の引数が返されます。
表現
return x ?? y
は、我々は時々2つの整数を追加しますが、機能を作りたいとしましょう
if x != nil {
return x!
} else {
return y
}
または
return x != nil ? x! : y
に相当します二つ目がnilできy
がnil
和であるならば、我々は
func add(x: Int, y: Int?) -> Int{
return x + (y ?? 0)
}
を書くことができ、それ以外の場合は、2つの整数を追加し、x + 0
です。 この機能が果たす役割をよりよく/より効率的に改善する方法がありますが、これは単なる例です。あなたはNil Coalescing Operator
ありがとう、ロドリゴ。 詳細については、オペレーター。 –
@HarriWestman私の編集した答えをお読みください –
もう一度、ありがとう、本当にありがとう。ご多幸をお祈りします!!! –
http://stackoverflow.com/documentation/swift/247/optionals#t=201608102313446025323 – jtbandes
について、ここで詳細を読むことができますそれは非常に右、私が探しているものを答えるのですjtbandes 、ありがとうございます。 –