如何在 Swift 中从 alamofire 中提取数据? [复制]

Posted

技术标签:

【中文标题】如何在 Swift 中从 alamofire 中提取数据? [复制]【英文标题】:How can I extract data from alamofire in Swift? [duplicate] 【发布时间】:2015-07-16 17:23:40 【问题描述】:

我正在尝试从请求中提取 JSON,以便在我的代码中使用它。但是返回了nil(控制台中的实际字符串是And here is JSON nil

class ViewController: UIViewController 

    var myVar: AnyObject?

    override func viewDidLoad() 
        super.viewDidLoad()

        Alamofire.request(.GET, "http://httpbin.org/get")
            .responseJSON  _, _, JSON, _ in
            self.myVar = JSON
        
        println("And here is JSON \(self.myVar)")
    

我该怎么做才能解决这个问题?

【问题讨论】:

来自github.com/Alamofire/Alamofire:“Alamofire 中的网络是异步完成的。异步编程可能会让不熟悉这个概念的程序员感到沮丧,但也有非常这样做的充分理由。不是阻止执行以等待来自服务器的响应,而是指定回调以在收到响应后处理它。请求的结果仅在响应范围内可用处理程序。 任何取决于从服务器接收到的响应或数据的执行情况都必须在处理程序内完成。" 【参考方案1】:

首先,你需要了解调用是否是异步的。如果是这样,则执行println 时没有结果。您可以将 println 放在结果块中,如下所示:

Alamofire.request(.GET, "http://httpbin.org/get")
.responseJSON  _, _, JSON, _ in
    self.myVar = JSON
    println("And here is JSON \(self.myVar)")

【讨论】:

抱歉,我是 ios 和编程新手,所以对一些概念不熟悉。 您需要查看什么是异步和非异步网络调用。 @AlexeyK 根据您的示例,它打印正常,但我无法将 JSON 结果存储在变量中。如果可以打印,有什么办法吗? 你这是什么意思?那是什么样的数据类型? [AnyObject:AnyObject][AnyObject]? 通过尝试完成了这项工作。我有一个问题 - 我在函数或闭包内没有任何变量 MyQuests,但它打印正常。你能描述一下为什么会这样吗? func getQuests(completionHandler: (NSDictionary) -> Void) Alamofire.request(.GET, "httpbin.org/get").responseJSON _, _, json, _ in completionHandler(json as!NSDictionary) var myQuests: NSDictionary?getQuests() myQuests 中的任务 = quests println("我的任务:(myQuests)")

以上是关于如何在 Swift 中从 alamofire 中提取数据? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中从 json 解析我的数据有啥问题?

如何在 swift 4 中从图像选择器获取照片本地 url

如何在 App Delegate 的“performFetchWithCompletionHandler”函数中从 Alamofire 获取数据?

如何通过 Alamofire 和 SwiftyJSON 在 UIViewController 中从根目录使用 JSON 对象

Swift 3:在 ViewDidLoad 中从服务器获取信息,当单击按钮时,等待服务器的信息响应

使用 Alamofire 使用 JSON 数组填充 UIPickerView 时遇到问题 |迅速