Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Swift 3中编写完成处理程序?_Swift_Swift3 - Fatal编程技术网

如何在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

我想知道如何为我在Swift 3中创建的函数创建一个完成处理程序。 这就是我在升级到Swift 3之前的工作方式:

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值:?请解释您只回答代码的答案没有多大帮助。