でオプションのプロパティへの割り当てをアンラップスウィフト2.2のコードを見直しながら、私はこれを見て、私は困惑しています:は、明示的スウィフト2.2
AValueははオプションではありません(myVar?.aProperty=aValue)!
。
この式の結果はどこにも格納されていないため、なぜ!最後に?また、このタイプの表現の用語は何ですか?
でオプションのプロパティへの割り当てをアンラップスウィフト2.2のコードを見直しながら、私はこれを見て、私は困惑しています:は、明示的スウィフト2.2
AValueははオプションではありません(myVar?.aProperty=aValue)!
。
この式の結果はどこにも格納されていないため、なぜ!最後に?また、このタイプの表現の用語は何ですか?
クロージャーで使用すると少し違いがあります。
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では、最後の例はコンパイルされませんでした。
コードをクロージャとはまったく異なるコンテキストで見つけた場合、その目的が何であるかはわかりません。
良い説明。しかし、コードは値を返さないfuncに埋め込まれていました。 – andrewz
IMO、そうです。式の結果は使用されません。 –