Как я могу предотвратить выход из моей функции Swift до завершения обратного вызова замыкания? - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь создать некоторые функции-оболочки для синхронной обработки некоторых асинхронных вызовов BLE CoreBluetooth с использованием замыканий.Я хочу, чтобы моя функция запуска была заблокирована и не выходила до получения обратного вызова completionHandler.Однако, если я вызываю мою функцию run несколько раз в цикле, она не ждет обратного вызова completionHandler и снова вызывает run.Таким образом, в конце концов, обратный вызов принимается только для последнего запуска.

Как я могу изменить свой код так, чтобы он ожидал в функции run, пока в функции registerDidUpdateCallback не будет вызван completionHandler()?

Я попытался прочитать несколько статейнасчет замыканий, но я все еще в замешательстве, и мой мозг зажарен.

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