我创建了一个全局函数,它正在关闭,因为它是参数之一。请参阅下面的代码,
func delayExecute(delay:Double, task:()->Void) {
var queue: dispatch_queue_t
queue = dispatch_get_main_queue()
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC))), queue, { task()})
}
我从控制器的ViewDidLoad调用此函数。
override func viewDidLoad() {
super.viewDidLoad()
progressHud = MBProgressHUD.showHUDAddedTo(self.view, animated: true)
delayExecute(2.0, {
self.progressHud?.hide(true)
})
}
viewDidLoad的重要部分是调用delayExecute
函数。它给了我一个错误:error: cannot invoke 'hide' with an argument list of type '(FloatLiteralConvertible, () -> () -> $T2)'
从下面的实验或试验和错误中我得出结论,这是一个单行闭包,因此,编译器隐式返回self.progressHud?.hide(true)
的值,这是" void"它正在创造问题。
我想知道以下事情,
尝试了以下事项并且这些事情正在发挥但不知道为什么,
delayExecute1(2.0, {
println("")
self.progressHud?.hide(true)
})
仅在该闭包中添加了println
语句。
delayExecute1(2.0, {
println(self.progressHud?.hide(true))
})
在println
delayExecute(2.0, {
self.progressHud!.hide(true)
})
使用!
(强制解包)而不是?
(可选链接)