簡體   English   中英

滿足條件時執行完成處理程序

[英]Execute completion handler when condition is met

我有一個函數依賴於另一個函數的completionHandler。 調用委托方法completedLogin時應調用completionHandler。 以下是我的代碼片段:

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
    }


}

但是,在后台線程中使用while循環似乎是一種非常占用資源的方法。 我嘗試使用NSTimer()但問題是它執行了另一個函數,所以我不能再使用回調函數了。 有沒有更好的/資源友好的方式來繼續檢查呢?

您必須在該函數中添加一個需要先完成的完成處理程序,如下所示:

func completedLogin(sender: LogInScreen, completionHandler :(evaluatedSuccessfully: Bool) -> ()){


self.loginCompleted = true
completionHandler(evaluatedSuccessfully: true)
}

然后,您可以像這樣在任何其他函數中調用此函數:

completedLogin(sender: <your sender>){ success in

If success{
//do something
}

else{
//report an error
}
}
class loginClass : LoginScreenDelegate {

    var loginCompleted : Bool = false
    var completionHandler: (() -> Void)!

    func performLogin(completionHandler: (() -> Void)) {

        ...

        self.completionHandler = completionHandler

    }

    func didLogin(sender: LogInScreen, success: Bool) {
        // Do nothing
    }

    func completedLogin(sender: LogInScreen) {
        self.loginCompleted = true
        self.completionHandler()
    }


}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM