How do you write a completion handler in Swift 3?

2019-01-10 19:13发布

I was wondering how to make a completion handler for a function I'm creating in Swift 3. This is how I did my function right before I updated to 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)
    })}

But now I can't figure out the best approach that works right now.

标签: swift swift3
2条回答
Lonely孤独者°
2楼-- · 2019-01-10 19:35

In Swift 3 the function parameter labels in closures are gone.

Remove all occurrences of success: and add @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)
    })
}

And use it

Logout() { success in
   print(success)
}
查看更多
再贱就再见
3楼-- · 2019-01-10 19:35

No need to include Parameter names in Swift 3. auto completion suggest to add @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)
    })
}
查看更多
登录 后发表回答