0
鑑於下面的函數聲明閉合表達式{EXP} VS {返回EXP}
func foo(f:()->Foo) -> Bar
是什麼在下面的代碼兩種變體使用閉合表達式的差:)
甲
let result = foo {
return Foo()
}
B)
let result = foo {
Foo()
}
請注意,常數result
的類型未指定,必須推斷。
我問的原因是編譯器似乎有所作爲 - 至少目前。這是由於這樣的事實:在很多情況下,當使用return Foo()
作爲閉包表達式時,編譯器無法推斷閉包表達式的類型。另一方面,省略return
可能會由編譯器發出另一個錯誤,因爲它可能需要return
(儘管我不同意編譯器,但是我離題了......)
這個問題通常可以通過完全解決指定閉合表達,例如:
let result = foo {() -> Foo in
return Foo()
}
或有時也可以通過明確地指定的result
類型來緩解。
相關:http://stackoverflow.com/q/26305402/335858 – dasblinkenlight 2014-10-11 10:51:52
dasblinkenlight: 「這看起來像一個編譯器錯誤給我。」我同意,這可能是一個明顯的原因。我已經在幾天(幾個星期前)之前提交了一份相關的錯誤報告。 – CouchDeveloper 2014-10-11 10:55:37