Возможно, я не понимаю концепцию обработчика завершения, но у меня есть такая функция:
func someFunction(completion: @escaping (Bool, LoginError?) -> Void) {
self.checkDevice() { allowed, error in
if let e = error {
completion(false, e)
}
completion(true, nil)
}
}
Несмотря на то, что checkDevice()
делает что-то, основная предпосылка c заключается в том, что он выполняет асинхронный сетевой вызов и возвращает либо true без ошибок (nil), либо возвращает false с ошибкой.
Когда я запускаю этот код, я Я обнаружил, что обработчик завершения вызывается дважды. Он отправляет завершение в виде кортежа (как false, error
), а также как (true, nil
). Я провел некоторую отладку, и, кажется, нет способа, которым someFunction()
вызывается дважды.
Я верил, что после отправки завершение функция завершится , В моем тестовом примере я выдвигаю ошибку из checkDevice()
, которая должна привести к отправке завершения как (false, error
), но я вижу и (false, error
), и (true, nil
). Разве завершение не приводит к немедленному завершению функции?