如何防止我的Swift函数在转义闭包回调完成之前退出?

时间:2019-02-06 21:27:27

标签: ios swift escaping closures

我正在尝试使一些包装器函数使用闭包同步处理一些异步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)
        }
    }

0 个答案:

没有答案