2016-08-10 9 views
-2

オプションの変数について説明する記事がいくつかあります。Swiftオプション値の明確化の使用

しかし、この種の例ではまだわかりません。

var metadata: AnyObject? 
metadata = ....... 
metadata?.getValue 
metadata!.getValue 

メタデータ?とメタデータ!、どちらもランタイムエラーなしで動作しています。 誰もその違いについて説明できますか?

+0

http://stackoverflow.com/documentation/swift/247/optionals#t=201608102313446025323 – jtbandes

+0

について、ここで詳細を読むことができますそれは非常に右、私が探しているものを答えるのですjtbandes 、ありがとうございます。 –

答えて

1

あなたの例でメタデータが実際には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できynil和であるならば、我々は

func add(x: Int, y: Int?) -> Int{ 
    return x + (y ?? 0) 
} 

を書くことができ、それ以外の場合は、2つの整数を追加し、x + 0です。 この機能が果たす役割をよりよく/より効率的に改善する方法がありますが、これは単なる例です。あなたはNil Coalescing Operator

+0

ありがとう、ロドリゴ。 詳細については、オペレーター。 –

+0

@HarriWestman私の編集した答えをお読みください –

+0

もう一度、ありがとう、本当にありがとう。ご多幸をお祈りします!!! –