【问题标题】:How can i force method to wait until a callback finishes on swift?我如何强制方法等到回调在 swift 上完成?
【发布时间】:2015-04-09 07:34:53
【问题描述】:

我正在尝试发出 http post 请求, 但该方法在字典被填满之前返回。

如何强制方法等待回调?

func makeRequest()-> [String :AnyObject]{
        var ans : [String :AnyObject] = ["response" : "", "data" : "", "error" : ""]
        var request = NSMutableURLRequest(URL: NSURL(string: self.url)!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 5)
        if self.jsonIcluded {
            var err: NSError?
            let req = NSJSONSerialization.dataWithJSONObject(self.data!, options: NSJSONWritingOptions.PrettyPrinted, error: &err)
            request.HTTPBody = req
        }
        request.HTTPMethod = "POST"
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")

        let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
            data, response, error in

            if error != nil
            {
                println("error=\(error)")
                return
            }
            ans["response"] = response
            ans["data"] = data
            ans["error"] = error
        }
        task.resume()
        return ans
    }

【问题讨论】:

  • 不能同步调用吗?
  • 在makeRequest的入参中加入补全块,而不是return,在ans["error"]之后调用补全块...
  • 谢谢!成功了!

标签: ios swift callback httprequest


【解决方案1】:

NSURLSession 用于发出异步请求。如果要发送同步请求,请使用NSURLConnection -sendSynchronousRequest: 方法。

let reply = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&error)
return reply

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    相关资源
    最近更新 更多