我正在尝试使一些包装器函数使用闭包同步处理一些异步BLE CoreBluetooth调用。我希望我的运行函数被阻止,直到收到completionHandler
回调后才退出。但是,如果我在循环中多次调用run
函数,它不会等待completionHandler
回调并再次调用run
。因此最后只收到最后一次运行的回调。
如何修改代码,使其在run
函数中等待,直到在completionHandler()
函数中调用registerDidUpdateCallback
为止?
我尝试阅读大量有关闭包的文章,但我仍然感到困惑,我的大脑也炸了。
func run(characteristic: CBCharacteristic, completionHandler: @escaping
CommandCompletionHandler) {
registerDidUpdateCallback(completionHandler)
motePeripheral.basePeripheral?.readValue(for: characteristic)
}
func registerDidUpdateCallback(completionHandler: @escaping CommandCompletionHandler) {
motePeripheral.setDidUpdateCharacteristicCompleteCallback { (updatedCharacteristic) -> Void in
let decoded = updatedCharacteristic.getDecoded()
print("Done reading and decoding Read
characteristic: \(updatedCharacteristic) with
Value: \ . (decoded)")
completionHandler(true)
}
}