2016-09-22 6 views
30

мне было интересно, как сделать обработчик завершения для функции Я создаю в Swift 3. Это, как я сделал свою функцию прямо перед тем, как обновленное Свифта 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) 
    })} 

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

+0

https://developer.apple.com/library/content/documentation/Swift/Conc eptual/Swift_Programming_Language/Closures.html? – Larme

ответ

58

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

Вы случайно не знаете, почему переменные были изменены в Swift 3? (Кроме того, большое спасибо! Я попробую, когда вернусь к компьютеру.) –

+0

Вы должны позаботиться о заказе. – vadian

+0

Это сработало отлично! Благодаря! –

0

Нет необходимости включать в себя имена параметров в 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) 
    }) 
} 
+2

Пожалуйста, объясните, что вы отвечаете только на код ответа. – Jeet