如何在Swift 3中编写完成处理程序?
我想知道如何为我在Swift 3中创建的函数创建一个完成处理程序。 这就是我在升级到Swift 3之前的工作方式:如何在Swift 3中编写完成处理程序?,swift,swift3,Swift,Swift3,我想知道如何为我在Swift 3中创建的函数创建一个完成处理程序。 这就是我在升级到Swift 3之前的工作方式: func Logout(completionHandler: (success: Bool) -> ()) { backendless.userService.logout( { ( user : AnyObject!) -> () in print("User logged out.") comp
func Logout(completionHandler: (success: Bool) -> ()) {
backendless.userService.logout(
{ ( user : AnyObject!) -> () in
print("User logged out.")
completionHandler(success: true)
},
error: { ( fault : Fault!) -> () in
print("Server reported an error: \(fault)")
completionHandler(success: false)
})}
但是现在我想不出目前最有效的方法。在Swift 3中,闭包中的函数参数标签消失了 删除所有出现的
成功:
并添加@escaping
func Logout(completionHandler:@escaping (Bool) -> ()) {
backendless?.userService.logout(
{ user in
print("User logged out.")
completionHandler(true)
},
error: { fault in
print("Server reported an error: \(fault)")
completionHandler(false)
})
}
并使用它
Logout() { success in
print(success)
}
不需要在Swift 3中包含参数名称。自动完成建议添加@esacping
func Logout(completionHandler:@escaping (Bool) -> ()) {
backendless?.userService.logout(
{( user: Any?) -> (Void) in
print("User logged out.")
completionHandler(true)
},
error: { ( fault : Fault?) -> (Void) in
print("Server reported an error: \(fault)")
completionHandler(false)
})
}
?您知道为什么Swift 3中的变量发生了变化吗?(另外,非常感谢!我回到电脑后会试试。)你必须处理好顺序。@vadian为什么必须在这个闭包的参数列表之前放置@escaping?关闭似乎没有逃脱,它是在
func Logout
中调用的,因此不应在Swift 3中指定@escaping标志。@bibscy所有用作异步回调的闭包都是escaping
。一旦去掉参数名success,我如何访问Bool值:?请解释您只回答代码的答案没有多大帮助。