带有POST请求的完成处理程序

时间:2016-08-20 21:26:00

标签: ios swift completionhandler

我有简单的登录方法,返回bool,取决于用户登录的成功。我对响应的顺序和代码的执行有问题。我已经阅读了有关完成处理程序的内容,我认为这是解决我的问题的方法,但我不确定。这是我的方法:

write_register()

我想在if if中检查变量loggedIn等于true的语句中返回成功变量。但在那种情况下我得到错误。

然后我做了这个方法。问题是该方法比POST请求更快地返回变量成功。所以在每种情况下都是假的。我打印变量以查看代码执行的顺序,方法首先打印" classOUT",返回变量,然后设置变量值并打印" classIN"。

我怎么能等到记录用户的代码被执行,这样我才能获得变量成功的正确值?

2 个答案:

答案 0 :(得分:0)

执行用户登录,设置nsuserdefaults并返回bool结果

completionBlock:是当你像任何一个块一样调用它时会被执行的块,但你可以选择何时以及通过该块传递的内容。

    func login(username: String, password:String,completionBlock : ((success : Bool)->Void)){

        //sending inputs to server and receiving info from server
        let postRequest = postDataToURL()
        postRequest.link = "http://pnc.hr/rfid/login.php"
        postRequest.postVariables = "username=" + username + "&password=" + password

    postRequest.forData("POST") { jsonString in
        // getting the result from the asinhronys task
        let result = convertStringToDictionary(jsonString as String)
        if let loggedIn = result?["loggedIn"] as? Bool where loggedIn == true {

            let userType = result?["userType"] as? String
            let token = result?["token"] as? String

            //if user is logged - setting parameters in Key Chains and redirecting them to the menu view
            let defaults = NSUserDefaults.standardUserDefaults()
            defaults.setObject(loggedIn, forKey: "loggedIn")
            defaults.setObject(username, forKey: "username")
            defaults.setObject(userType, forKey: "userType")
            defaults.setObject(token, forKey: "token")

            completionBlock(success:true)
        }
        else {
            completionBlock(success:false)
        }
    }
}

当你打电话时,它看起来像这样: -

    login(username: String, password:String,completionBlock : { (success) in
     print(success)
  })

答案 1 :(得分:0)

你可以做这样的事情

func login(username: String, password: String, completion: (Bool) -> ()) {


    ... YOUR USUAL NETWORKING CODE ...


    completion(success)

}

然后调用它

login(username: anonymous, password: ******) { authStatus in

    if authStatus == true {
        print("user in")
    } else {
        print("try one more time")
    }

}