【问题标题】:How to return an outer function inside an asynchronous inner function in swift?如何快速返回异步内部函数中的外部函数?
【发布时间】:2015-09-02 08:08:01
【问题描述】:

我正在创建一个 swift 类,其中包含一个验证用户是否为真的函数。但是,userVerifyResult 将始终返回“false”,即使结果为 true,因为 dataTaskWithRequest 函数是异步执行的。我该如何解决这个问题?

class userLibService: NSObject{

   func VerifyUser() -> String{
         var userVerifyResult = "false"
        var url =  NSURL(string: "http://www.example.com/test.php")!
        var request = NSMutableURLRequest(URL: url)
        request.HTTPMethod = "POST"

        var bodyData = "username=tee&password=123&data=true"

        request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding)


        let task = NSURLSession.sharedSession().dataTaskWithRequest(request){

            data, response, error in

            var parseError: NSError?

            if let json = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &parseError) as? [String : String] {

                 if(json["valid"]! == "true"){
                    userVerifyResult = "true"
                 }else{
                    userVerifyResult = "false"

                }

            }



        }

         task.resume()

        return userVerifyResult
    }
}

在我的主程序中:

var test = userLibService()
  println(test.VerifyUser())

即使用户名和密码为真,它也会返回“假”

【问题讨论】:

    标签: ios swift closures


    【解决方案1】:

    使用完成处理程序,就像 Apple 在其框架中所做的那样:

    func verifyUser(completionHandler: ((result: Bool)->())) {
    

    然后通过

    返回结果
            if(json["valid"]! == "true"){
                completionHandler(result: true)
            }else{
                completionHandler(result: false)
            }
    

    然后调用它

    verifyUser { (result) -> () in
        println(result)
    }
    

    【讨论】:

      【解决方案2】:

      在您返回函数之前,无法阻止NSURLSessionDataTask(我知道),因此不可能那样做。您必须在任务完成处理程序中有一个回调,它将打印结果或将打印委托给另一个函数

      【讨论】:

        猜你喜欢
        • 2014-05-27
        • 1970-01-01
        • 2016-08-08
        • 2016-03-30
        • 1970-01-01
        • 2023-02-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多