ios - 试图在全局范围内访问响应

标签 ios json xcode swift alamofire

我正在使用 Alamofire,当我收到响应时,我试图将其设置为一个我可以在任何地方访问的变量。这就是我要做的事情

var data: NSData?
Alamofire.request(.POST, "http://localhost/api/notifications", parameters: parameters)
    .responseJSON { (request, response, JSON, error) in
           let data: AnyObject? = JSON
    }
println(data)

当我运行它时,我得到 nil....有什么想法吗?我知道请求很好,因为当我不将其分配给变量时,我可以在范围内看到响应。

最佳答案

Almofire.request 是一个异步函数。你调用它,它会立即返回;在它实际执行请求之前。因此,println(data) 在将 data 设置为 nil 之外的任何内容之前被调用。当请求实际完成时,Alamofire 将调用您传递给 responseJSON 的闭包,在该闭包中您将要实际使用 data(打印它或其他) :

Alamofire.request(.POST, "http://localhost/api/notifications", parameters: parameters)
    .responseJSON { (request, response, JSON, error) in
        let data: AnyObject? = JSON
        // do something useful with data
        println(data)
    }

来自评论的问题:

But then lets say I want to turn that data into a table. Would I just put all the table code inside the closure?

可以将所有代码放入闭包中,但这可能很快就会变得困惑。一个更好的处理方法是实现 Alamofire.request 正在使用的相同类型的模式。基本上,让你的请求成为它自己的函数将接受一个闭包作为参数。然后,在您传递给 responseJSON 的闭包中,调用传递给您的函数的闭包,传递给它 data。然后,创建一个单独的函数来“将数据转换为表格”,并使用闭包中的 data 调用它。像这样:

func callSomeAPI(resultHandler: (data: AnyObject?) -> ()) -> () {
    Alamofire.request(.POST, "http://localhost/api/notifications", parameters: parameters)
        .responseJSON { (request, response, JSON, error) in
           let data: AnyObject? = JSON
           resultHandler(data)
    }
}

func makeTable(data: AnyObject?) -> () {
    // make your table
}

callSomeAPI() { data in
    makeTable(data)
}

注意:您可能希望在某些时候将 data 转换为 AnyObject? 以外的内容。

关于ios - 试图在全局范围内访问响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26835004/

相关文章:

ios - ios 的 sqlite3_open 代码放置在哪里

ios - 如何在 Swift 中以编程方式更改 Split View Controller 中的详细 View

ios - 位码仍然可以在 Xcode 9.2 上禁用吗?

iOS Swift Realm 加密并与服务器同步

ios - 图像移过后按钮会改变吗?

php - android json 发布到 php

javascript - 爬取 JSON-LD 架构 : detailedDescription undefined?

objective-c - 是否可以使用 xcode 5 在命令行上运行单个测试用例/测试类?

ios - 使用在 TableView 中显示的 NSURLConnection 从服务器获取数据

jquery - 如何将Json数组显示到tinymce