新值仅在sendAsynchronousRequest - Swift中可用

时间:2014-08-27 16:12:32

标签: swift sendasynchronousrequest

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可以访问新值?

2 个答案:

答案 0 :(得分:3)

顾名思义,

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

答案 1 :(得分:1)

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

这就是:

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

    如果要使用更新的值,则必须稍微更改逻辑。您可以调用另一个闭包或类方法(意味着实例方法,而不是静态方法),以便在设置变量后对该变量进行过程处理。