2014-11-24 36 views
3

在這裏我有一個簡單的片段來使用簡單的動畫與我定義的UIView。Swift Closure Single Statement Issue

UIView.animateWithDuration(0.1) { [weak self] in 

    self?.popOverView.center = gesture.locationInView(self?.view) 
} 

這裏[弱自我]是爲了避免參考週期,我也用尾隨封簡單的code.Howerver,編譯器是不滿的是,給我的錯誤信息。

Cannot invoke 'animateWithDuration' with an argument list of type '(FloatLiteralConvertible,() ->() -> $T2)' 

$ T2是什麼意思?奇怪的是,當閉包體中有兩個或更多的語句時,它編譯正確。

UIView.animateWithDuration(0.1) { [weak self] in 
    println() 
    self?.popOverView.center = gesture.locationInView(self?.view) 
} 

而且我知道如果閉包體中只有一條語句,它會自動返回。在封閉

回答

5

單語句體有隱含的回報,所以會發生什麼情況是,編譯器會嘗試設置此語句的結果:

self?.popOverView.center = gesture.locationInView(self?.view) 

的返回值。您可以通過添加一個明確的return

self?.popOverView.center = gesture.locationInView(self?.view) 
return 

這裏面有單隻的語句,這就是爲什麼它正常工作在你的第二情況下解決這個問題

更多信息:Implicit Returns from Single-Expression Closures

+0

它工作在xCode6.1,謝謝。 – tounaobun 2014-11-24 11:19:28