我知道 Swift 3 中的更改,其中 @nonescaping 是闭包的默认行为。
我已成功更改了有关更改的大部分代码,但我的代码的一部分无法摆脱闭包使用非转义参数可能会导致其转义编译错误。
我尝试将 @escaping 添加到 updateHandler 参数和 UpdatedInProgressHandler 类型别名中,但这似乎还不够。
任何人都可以帮助我找出问题的原因吗?
定义类型别名和函数的代码:
// Typealiases used to clean up closures
typealias UpdateInProgressCompletion = () -> ()
typealias UpdateInProgressCancelCompletion = () -> ()
typealias UpdateInProgressHandler = ((_ completed: @escaping UpdateInProgressCompletion) -> ()) -> ()
// Method for wrapping the presentation and dismissal of the custom alert controller
func presentUpdateInProgress(_ taskIdentifier: String?, alertMessage: String?, alertHeader: String? = nil, updateHandler: @escaping UpdateInProgressHandler, cancel cancelHandler: UpdateInProgressCancelCompletion? = nil) {
let updateInProgressAlert = self.updateInProgressAlert( taskIdentifier, alertMessage: alertMessage, alertHeader: alertHeader ) { action in
cancelHandler?()
Logger.debug("User cancelled update")
}
updateInProgressAlert.present(completion: nil)
updateHandler { (completion) in
updateInProgressAlert.dismiss(completion: completion)
}
}
调用presentUpdateInProgress 函数时,我收到“关闭使用非转义参数“updateCompleted”可能允许转义”错误的代码。
self.presentUpdateInProgress(taskIdentifier, alertMessage: "My alert message", updateHandler: { (updateCompleted) -> () in
let task = CreateModelTask(completionHandler: { (resultObject) -> () in
updateCompleted { // this generates the error
//Do some stuff with received result
}
})
task.taskIdentifier = taskIdentifier
SyncManager.sharedManager.addTaskToQueue(task)
})