У меня есть функция, которая полагается на завершение Handler другой функции. Этот метод завершения должен быть вызван при вызове метода делегата completedLogin
. Ниже приведен фрагмент моего кода:Выполнение обработчика завершения при выполнении условия
class loginClass : LoginScreenDelegate {
var loginCompleted : Bool = false
func performLogin(completionHandler: (() -> Void)) {
...
let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue, {
while self.loginCompleted != true {
// Do nothing
}
completionHandler()
})
}
func didLogin(sender: LogInScreen, success: Bool) {
// Do nothing
}
func completedLogin(sender: LogInScreen) {
self.loginCompleted = true
}
}
Однако, используя время цикла в фоновом потоке кажется очень ресурсоемким способом. Я попытался использовать NSTimer()
, но проблема в том, что он выполняет другую функцию, поэтому я больше не могу использовать функцию обратного вызова. Есть ли лучший/ресурсосберегающий способ продолжать проверять это?
Возможно, вы захотите сохранить «completeHandler» в качестве переменной экземпляра и вызвать его явно из «завершенного логина». – luk2302
Я боюсь, что не знаю, как это работает, я пробовал работать над процессом, но не смог. Не могли бы вы дать краткое объяснение, почему и как это будет работать? – Emptyless