swift - 如何在等待设置值的同时快速返回 NSDictionary ?

标签 swift nsdictionary

请放过我吧。我是 Swift 新手

我的问题是我无法返回我的 NSDictionary 这是我的函数

   private func request(url:String, baseURL:String) -> NSDictionary {
       var dict:NSDictionary!
        var request = HTTPTask()
        request.requestSerializer = HTTPRequestSerializer()
        request.requestSerializer.headers[headerKey] = getToken() //example of adding a header value

        request.baseURL = baseURL

        request.GET(url, parameters: nil, success: {(response: HTTPResponse) in
            if var data = response.responseObject as? NSData {
                let str = NSString(data: data, encoding: NSUTF8StringEncoding)
                var error: NSError?
                dict = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary
              println("response: \(dict)") 
            }
            },failure: {(error: NSError, response: HTTPResponse?) in
                println("error: \(error)")
        })

       return dict 
    }

返回的字典就像{}一样是空的,但是当我在函数内部println("response:\(dict)")时似乎记录了我的数据。

我认为我的函数返回一个空对象,因为 .GET 方法正在不同的线程中运行并等待响应。

任何人都可以帮助我,任何评论都可以。

最佳答案

你是对的,请求在另一个线程中异步运行,我建议使用完成处理程序。

private func request(url: String, baseURL: String, completion: (result: NSDictionary) -> Void) {

    var dict:NSDictionary!
    var request = HTTPTask()
    request.requestSerializer = HTTPRequestSerializer()
    request.requestSerializer.headers[headerKey] = getToken() //example of adding a header value

    request.baseURL = baseURL

    request.GET(url, parameters: nil, success: {(response: HTTPResponse) in
        if var data = response.responseObject as? NSData {
            let str = NSString(data: data, encoding: NSUTF8StringEncoding)
            var error: NSError?
            dict = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary
          println("response: \(dict)")
          completion(result: dict) 
        }
        },failure: {(error: NSError, response: HTTPResponse?) in
            println("error: \(error)")
            completion(result: nil) //this is not the best option, better would be to return error in error handler
    })
}

有关更多信息,请查看:http://www.veasoftware.com/tutorials/2015/1/13/completion-handlers-swift-programming-tutorial

关于swift - 如何在等待设置值的同时快速返回 NSDictionary ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29078887/

相关文章:

swift - 将 SwiftUI 修饰符 .onMove() 限制为仅当前列表

ios - 为什么我无法在 iOS 中将字典中的值追加到数组中?

json - 使用带有字典数组的字典进行 Swift JSON 解析

ios - 我如何将带有对象数组的 json 字符串转换为带有 nsdictionaries 的 nsarray - IOS

ios - 如何在 Swift 3 中访问这些数组的第二部分?

amazon-web-services - 使用 Swift 进行 Amazon AWS DynamoDB 查询的最佳方式?

swift - Userdefaults Tableview 地标 Swift 3

iOS 选择要在表格中显示的特定条目

objective-c - 当我创建一个整数作为对象的 NSDictionary 时应用程序崩溃

ios - 如何评估 NSPredicate 中的 NSDictionary