web-dev-qa-db-de.com

Wie schreibst du einen Abschluss-Handler in Swift 3?

Ich habe mich gefragt, wie ich einen Abschluss-Handler für eine Funktion erstellen kann, die ich in Swift 3 erstellt habe .. So habe ich meine Funktion ausgeführt, bevor ich zu Swift 3 wechselte:

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

Aber jetzt kann ich nicht herausfinden, was am besten funktioniert.

32
Noah G.

In Swift 3 sind die Funktionsparameteretiketten in Schließungen weg.

Entfernen Sie alle Vorkommen von success: und fügen Sie @escaping hinzu.

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

Und benutze es

Logout() { success in
   print(success)
}
64
vadian

Es ist nicht erforderlich, Parameternamen in Swift 3 einzubeziehen

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