ios - 函数中的完成处理程序
问题描述
我有一个看起来像这样的函数,我尝试completionHandler
在下面的代码中添加一个:
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)")
}
}
我已经尝试添加一个完整的处理程序,但我在这些行中收到以下错误:
行:apii.getVehicle(id!).done {
错误:转义闭包捕获非转义参数“completionHandler”
行: apii.getAllData(vehicle).done { (extendedVehicle: VehicleExtended) in
错误:转义闭包捕获非转义参数“completionHandler”
我在这里做错了什么,我该如何解决?
我正在使用 Swift 5。
解决方案
你需要声明你completionHandler
是一个逃逸的闭包。例如:
func getValueFromAPI(completionHandler: @escaping (Bool) -> Void) {
...
}
注意@escaping
限定符。
推荐阅读
- apache-kafka-streams - 我在哪里可以找到 ArrayListSerde?
- android - 更新到 AndroidX 库和 Gradle 3.4.2 后的问题
- symfony - 使用 NotifyPropertyChanged 在可嵌入对象上未检测到任何更改
- javascript - 视频控件,例如播放/暂停不显示在 android chrome 上,用于 HTML5 视频页面的 mp4 视频
- c# - 将单独文件中的字符串合并到单个 XML 文档中
- c++ - 工厂方法设计模式和桥接模式有什么区别?
- google-chrome - SSE 在 chrome 中被屏蔽
- vue.js - 开玩笑错误找不到模块....映射为:
- linux - 无法启动 SonarQube
- swift - 如何转动箭头(图像)使其不会转动 CalloutView