如何在 swift 中 return NSDictionary,同时等待其值被设置?

How to return NSDictionary in swift, while waiting for its value to be set?

请放过我。我是 swift

的新手

我的问题是我不能 return 我的 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 
    }

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

我认为我的函数 return 是一个空对象,因为 .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