首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Swift中用Alamofire处理JSON响应

在Swift中用Alamofire处理JSON响应
EN

Stack Overflow用户
提问于 2014-09-21 06:24:33
回答 4查看 13.2K关注 0票数 2

对不起,我的英语不好:)

我有一个问题,在一个iOS应用的Swift中解析JSON在Alamofire上的响应。我编写了一个函数来返回一个JSON响应字符串。我用阿拉莫火处理请求和响应,用SwiftyJSON处理JSON。在开始时,我声明一个名为jsonString的变量,其值为测试。然后,我向REST服务发出请求,单击一个按钮得到一个JSON响应。这个响应我想用函数ping(url:String).返回最后,我打印返回的响应作为测试。但是,在第一次单击按钮时,来自ping的返回值是test,而不是响应的JSON字符串。在第二次单击按钮时,我得到了正确的返回值。为什么我有这个问题。Alamofire请求是异步操作吗?我想等你的回应。如何解决这个问题,以便在第一次单击时获得正确的值,而不是测试作为值?

这是我的代码:

代码语言:javascript
运行
复制
var jsonString:String = "test"

func ping(url:String) -> String {

    Alamofire.request(.GET, url)
        .response {
            (request, response, data, error) -> Void in

            let json = JSONValue(data as? NSData)
            self.jsonString = json.rawJSONString
    }

    return self.jsonString
}

@IBAction func checkOnlineStatus(sender: UIButton) {

    let response:String = ping("http://test.com")

    println(response)}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-24 02:59:32

在第一次单击中,代码

代码语言:javascript
运行
复制
return self.jsonString

将在此之前

代码语言:javascript
运行
复制
.response {
        (request, response, data, error) -> Void in

        let json = JSONValue(data as? NSData)
        self.jsonString = json.rawJSONString
}

您将在第一次从self.jsonString中获得零,第二次单击将获得第一次单击的请求数据。

如果您使用SwiftyJSON和Alamofire,您可以尝试Alamofire-SwiftyJSON

票数 3
EN

Stack Overflow用户

发布于 2014-11-20 09:07:07

你也可以试着跑

代码语言:javascript
运行
复制
dispatch_sync(dispatch_get_main_queue()) {
  // insert code you need done the first time around - it will wait
}
票数 1
EN

Stack Overflow用户

发布于 2015-10-14 17:52:31

您遇到的问题是,您正在尝试同步返回异步方法的结果。

你有两个解决方案:

  1. 异步返回结果
  2. 等待异步调用完成

几分钟前,我在这个帖子上写了一个同样的问题的答复,我建议你检查一下:https://stackoverflow.com/a/33130512/422288

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

https://stackoverflow.com/questions/25956445

复制
相关文章

相似问题

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