2014-11-24 38 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