繁体   English   中英

使主线程等待,直到URLRequest完成

[英]Make main thread wait until URLRequest finishes

我试图保持执行直到URLRequest完成。

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
    self.sendRequest(request: request as URLRequest) {
        }
    self.firebaseAuth(credential)
    self.performSegue(withIdentifier: SEGUE_TO_FIRST_CONTENT_PAGE, sender: nil)

}

func sendRequest (request: URLRequest, completion: @escaping () -> ()) {
    let session = URLSession.shared

    session.dataTask(with: request as URLRequest) { (data, response, error) in
        UIApplication.shared.isNetworkActivityIndicatorVisible = false
        do {
            let userData = try JSONSerialization.jsonObject(with: data!, options:[]) as? [String:AnyObject]
            let genderData = userData!["gender"] as! String
            self.userObject.gender = genderData
            completion()
        } catch {
            completion()
            print("ERROR")
        }
        print("sendRequest Done!")
        }.resume()
}

现在,它甚至在完成sendRequest()之前就执行segue。 我不知道如何使主线程等待直到sendRequest()完成。

修改完成处理程序以传递请求状态,并根据状态在完成处理程序中执行操作。如果操作与UI有关,则将其包装在主线程中。

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
    self.sendRequest(request: request as URLRequest){ (loginStatus) in
        if loginStatus {
            DispatchQueue.main.async {
            self.firebaseAuth(credential)
            self.performSegue(withIdentifier: SEGUE_TO_FIRST_CONTENT_PAGE, sender: nil)
            }
        }
        else{
            //Handle Error case
        }
    }

}

func sendRequest (request: URLRequest, completion: @escaping (Bool) -> ()) {
    let session = URLSession.shared

    session.dataTask(with: request as URLRequest) { (data, response, error) in
        UIApplication.shared.isNetworkActivityIndicatorVisible = false
        do {
            let userData = try JSONSerialization.jsonObject(with: data!, options:[]) as? [String:AnyObject]
            let genderData = userData!["gender"] as! String
            self.userObject.gender = genderData
            completion(true)
        } catch {
            completion(false)
            print("ERROR")
        }
        print("sendRequest Done!")
        }.resume()
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM