1
var arrayData: [String] = []

let bodyData = "parameter=test"

let URL: NSURL = NSURL(string: "Link to php file")
let request:NSMutableURLRequest = NSMutableURLRequest(URL:URL)
request.HTTPMethod = "POST"
request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding);
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue())
{
    (response, data, error) in
        var output = NSString(data: data, encoding: NSUTF8StringEncoding)

        self.arrayData = self.JSONParseArray(output)

        println(self.arrayData) //Print the result
}

println(self.arrayData) //Print nothing

看起来新值仅在 sendAsynchronousRequest 中可用

有没有办法让新值可以从 sendAsynchronousRequest 中访问?

4

2 回答 2

3

sendAsynchronousRequest顾名思义,是异步的。println因此,在请求完成之前您的最终运行。完成处理程序运行后,新数据将可供所有读者(在此处理程序内部或外部)使用。

于 2014-08-27T16:16:51.807 回答
1

sendAsynchronousRequest需要一个作为参数传递的回调,该回调在异步请求完成后执行。这超出了代码中的线性流程。

这就是发生的事情:

  1. 你打电话sendAsynchronousRequest
  2. 请求已启动,但函数立即返回(它不等待请求完成)
  3. 接下来执行该println行(代码中的最后一行)
  4. 一段时间后,异步请求完成,执行闭包
  5. 闭包为self.arrayData

如果要使用更新后的值,则必须稍微更改逻辑。您可以调用另一个闭包或类方法(表示实例方法,而不是静态方法)来发布处理该变量一旦设置。

于 2014-08-27T16:17:02.880 回答