web-dev-qa-db-fra.com

Comment écrivez-vous un gestionnaire d'achèvement dans Swift 3?

Je me demandais comment créer un gestionnaire d’achèvement pour une fonction que je crée dans Swift 3 . Voici comment j’ai réalisé ma fonction juste avant de mettre à jour vers 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)
    })}

Mais maintenant je ne peux pas trouver la meilleure approche qui fonctionne pour le moment.

32
Noah G.

Dans Swift 3, les étiquettes des paramètres de fonction dans les fermetures ont disparu.

Supprimer toutes les occurrences de success: et ajouter @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)
    })
}

Et l'utiliser

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

Il n'est pas nécessaire d'inclure les noms de paramètres dans Swift 3. La complétion automatique suggère d'ajouter @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