2016-09-21 8 views
1

でオプションのプロパティへの割り当てをアンラップスウィフト2.2のコードを見直しながら、私はこれを見て、私は困惑しています:は、明示的スウィフト2.2

AValueははオプションではありません
(myVar?.aProperty=aValue)! 

この式の結果はどこにも格納されていないため、なぜ!最後に?また、このタイプの表現の用語は何ですか?

+0

IMO、そうです。式の結果は使用されません。 –

答えて

1

クロージャーで使用すると少し違いがあります。

let closure1 = { 
    aVar?.aProperty = aValue 
} 
let closure2 = { 
    (aVar?.aProperty = aValue)! 
} 

スウィフトは()->Void?別名、()->Optional<()>としてclosure1の型を推測します。これは()->Voidと同じではありません。したがって、closure1は、()->Voidを請求するパラメータに渡すことはできません。

あなたが閉鎖のタイプ()->Voidを作りたいのであれば、あなたはこのような何か書く必要がある場合があります。

let closure1 = { 
    _ = aVar?.aProperty = aValue 
} 

またはこの:

let closure1 = { 
    aVar?.aProperty = aValue 
    return 
} 

さも:

let closure1 = { 
    (aVar?.aProperty = aValue)! 
} 

これで、次のようなコードを書くことができます:

let closure1:()->Void = { 
    aVar?.aProperty = aValue 
} 

しかし、古いSwiftでは、最後の例はコンパイルされませんでした。

コードをクロージャとはまったく異なるコンテキストで見つけた場合、その目的が何であるかはわかりません。

+0

良い説明。しかし、コードは値を返さないfuncに埋め込まれていました。 – andrewz

関連する問題