我看到這個在審查雨燕2.2的代碼,我很不解:明確的解包分配的可選特性在雨燕2.2
(myVar?.aProperty=aValue)!
其中安勤爲不可選。
這個表達式的結果不存儲在任何地方,因此爲什麼放一個!最後?另外,這種表達方式的術語是什麼?
我看到這個在審查雨燕2.2的代碼,我很不解:明確的解包分配的可選特性在雨燕2.2
(myVar?.aProperty=aValue)!
其中安勤爲不可選。
這個表達式的結果不存儲在任何地方,因此爲什麼放一個!最後?另外,這種表達方式的術語是什麼?
它在閉包中使用時有點不同。
let closure1 = {
aVar?.aProperty = aValue
}
let closure2 = {
(aVar?.aProperty = aValue)!
}
夫特推斷的closure1
類型()->Optional<()>
,又名()->Void?
。這與()->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,你是對的。表達結果不被使用。 –