Подтвердить что ты не робот

Как вы пишете обработчик завершения в 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)
    })}

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

4b9b3361

Ответ 1

В 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)
}

Ответ 2

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