Gestionnaire de complétion en fonction


JordanieSkyn

J'ai une fonction qui ressemble à ceci, et j'ai essayé d'ajouter un completionHandlerdans le code ci-dessous :

func getValueFromAPI(completionHandler: (_ result: Bool) -> Void){
    
    apii.getVehicle(id!).done {
        (vehicle: Vehicle) -> Void in
        
        print("ggg.state: \(vehicle.state!)")
        print("ggg.state: \(vehicle.displayName!)")
        
        apii.getAllData(vehicle).done { (extendedVehicle: VehicleExtended) in
            
            let entryBattery = (extendedVehicle.chargeState?.batteryLevel)!
            let entryCarState = (extendedVehicle.state)!
            
            print("entryBattery: \(entryBattery)")
            print("entryCarState: \(entryCarState)")
            
            completionHandler(true)
            
        }.catch { (error) in
            print("ERROOOOR: \(error)")
        }
    }.catch { error in
        print("errorr: \(error)")
    }
}

J'ai déjà essayé d'ajouter un gestionnaire complet, mais j'obtiens l'erreur suivante sur ces lignes :

Ligne : apii.getVehicle(id!).done {

Erreur : La fermeture d'échappement capture le paramètre sans échappement 'completionHandler'

Ligne : apii.getAllData(vehicle).done { (extendedVehicle: VehicleExtended) dans

Erreur : La fermeture d'échappement capture le paramètre sans échappement 'completionHandler'

Qu'est-ce que je fais mal ici et comment puis-je résoudre ce problème ?

J'utilise Swift 5.

Rob

Vous devez déclarer que vous completionHandlerêtes une fermeture en fuite. Par exemple:

func getValueFromAPI(completionHandler: @escaping (Bool) -> Void) {
   ...
}

Notez le @escapingqualificatif.

Articles connexes


Swift - gestionnaire de complétion en boucle

user979331 J'ai une méthode avec un gestionnaire de complétion func postLandGradingImages(cellHolder: Array<ImagesData>, completionHandler:@escaping (_ result:Bool) -> Void) { //Define bool for returning data var returnedResults = false

Appeler sa propre fonction avec un gestionnaire de complétion

da1lbi3 J'ai une méthode pour créer un compte : func createAccount (completion: @escaping (_ succes: Bool, _ message : String)->()) { Auth.auth().createUser(withEmail: createMail(), password: createPassword()) { (result, error) in if let _eror = er

Comment appeler ce gestionnaire de complétion?

Kashif Je travaille avec Swift et je dois appeler cette méthode pour appeler des services Web. Je suis confus d'obtenir une erreur dans le gestionnaire d'achèvement. func makePost(serverURL: String, params: Dictionary<String,String>, completionHandler:(data:St