Как вы пишете обработчик завершения в 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)
})}
Но теперь я не могу найти оптимальный подход, который работает прямо сейчас.
Ответы
Ответ 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)
})
}