也许我不了解完成处理程序的概念,但是我有类似的功能;
func someFunction(completion: @escaping (Bool, LoginError?) -> Void) {
self.checkDevice() { allowed, error in
if let e = error {
completion(false, e)
}
completion(true, nil)
}
}
尽管了解checkDevice()
的功能,但基本前提是它执行异步网络调用,并返回无错误的true(无错误)或返回有错误的false。
当我运行此代码时,我发现完成处理程序被调用了两次。它以元组(作为false, error
)和(true, nil
)发送补全。我已经进行了一些调试,似乎没有办法两次调用someFunction()
。
我相信一旦发送completion,该函数就会结束。在我的测试用例中,我强制执行checkDevice()
中的错误,这将导致我以(false, error
)发送完成,但同时看到了[false, error
)和(true, nil
)。完成是否不会立即结束功能?
完成处理程序不会结束函数。只有return
结束功能。