it-roy-ru.com

Как вы пишете обработчик завершения в Swift 3?

Мне было интересно, как сделать обработчик завершения для функции, которую я создаю в 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)
    })}

Но сейчас я не могу найти лучший подход, который работает сейчас.

32
Noah G.

В Swift 3 метки параметров функции в замыканиях исчезли.

Удалите все вхождения success: и добавьте @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)
}
64
vadian

Не нужно включать имена параметров в 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)
    })
}
0
MSPL Apps