首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新值仅在sendAsynchronousRequest - Swift中可用。

新值仅在sendAsynchronousRequest - Swift中可用。
EN

Stack Overflow用户
提问于 2014-08-27 16:12:32
回答 2查看 584关注 0票数 1
代码语言:javascript
复制
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中的新值可访问?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-27 16:16:51

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

票数 3
EN

Stack Overflow用户

发布于 2014-08-27 16:17:02

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

这就是发生的事情:

  1. 你叫sendAsynchronousRequest
  2. 请求已启动,但函数将立即返回(它不会等待请求完成)
  3. 下一步将执行println行(代码中的最后一行)
  4. 过了一段时间,异步请求就完成了,闭包就执行了。
  5. 闭包为self.arrayData分配一个值

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25532097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档