这里我有一个简单的片段,可以使用我定义的UIView的简单动画。
UIView.animateWithDuration(0.1) { [weak self] in
self?.popOverView.center = gesture.locationInView(self?.view)
}
这里[弱自我]是为了避免引用循环,我也使用尾随闭包来简单地代码.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)
}
我知道如果封闭体中只有一个语句,它会自动返回。
答案 0 :(得分:5)
闭包中的单个语句体具有隐式返回,所以会发生的情况是编译器尝试设置此语句的结果:
self?.popOverView.center = gesture.locationInView(self?.view)
作为返回值。您可以通过添加明确的return
self?.popOverView.center = gesture.locationInView(self?.view)
return
仅在单个语句中发生这种情况,这就是为什么它在第二种情况下正常工作