我定义了一个非常简单的函数,它将在下一个运行循环迭代中执行一个块:
func NextRun(f:() -> ()){
let observer = CFRunLoopObserverCreateWithHandler(nil, CFRunLoopActivity.Entry.rawValue, Boolean(0), 0) { obs, act in f() }
CFRunLoopAddObserver(CFRunLoopGetMain(), observer, kCFRunLoopCommonModes)
}
很简单,我可以使用它,只要我直接为其签名匹配预期参数的命名闭包。例如:
func alertUser() {
self.masterRouter?.didReceiveMessage(userID)
}
NextRun(alertUser)
然而,我不能做的就是把它关掉。这失败了:
NextRun{
self.masterRouter?.didReceiveMessage(userID)
}
我收到错误:
无法转换表达式'() - > () - > $ T1'输入'()'
我尝试过各种语法,但总是会遇到同样的错误。似乎Swift将闭包签名与闭包内部的函数混淆了......或者我错过了什么?