UIView需要根据自定义控件的完成处理程序更改警告标签:
voucherInputView.completionHandler = {[weak self] (success: Bool) -> Void in self?.proceedButton.enabled = success self?.warningLabel.alpha = 1.0 if success { self?.warningLabel.text = "Code you entered is correct" self?.warningLabel.backgroundColor = UIColor.greenColor() } else { self?.warningLabel.text = "Code you entered is incorrect" self?.warningLabel.backgroundColor = UIColor.orangeColor() } UIView.animateWithDuration(NSTimeInterval(1.0), animations:{ ()-> Void in self?.warningLabel.alpha = 1.0 })
最后的动画块显示表格中的错误。
Cannot invoke 'animateWithDuration' with an argument list of type '(NSTimeInterval), animations: ()-> Void)'
如果我在完成闭包之外的某个地方调用它,那么它将起作用。
问题是闭包隐式返回此表达式的结果:
self?.warningLabel.alpha = 1.0
但闭包本身被声明为returning Void。
Void
添加一个显式return应该可以解决此问题:
return
UIView.animateWithDuration(NSTimeInterval(1.0), animations: { ()-> Void in self?.warningLabel.alpha = 1.0 return })