0
votes

I have a function that looks like this, and I have tried to add a completionHandler in the code below:

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

I have already tried to add a complete handler, but I get the following error on these lines:

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

Error: Escaping closure captures non-escaping parameter 'completionHandler'

Line: apii.getAllData(vehicle).done { (extendedVehicle: VehicleExtended) in

Error: Escaping closure captures non-escaping parameter 'completionHandler'

What am I doing wrong here, and how can I fix this?

I am using Swift 5.

1

1 Answers

1
votes

You need to declare your completionHandler to be an escaping closure. E.g.:

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

Note the @escaping qualifier.