【发布时间】:2016-04-05 02:37:07
【问题描述】:
我正在尝试异步调用,但我有点迷茫。 viewDidLoad 中的 print(json) 输出一个空字典,但函数中的字典打印正确。这不足为奇。它在异步完成之前打印。我不知道如何解决它;我尝试将返回值放在完成处理程序中,但出现Unexpected non-void return value in void function 的错误。我尝试更改完成处理程序以期望返回值,但这不是正确的方法,或者我做错了。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let json = getJson("https://maps.googleapis.com/maps/api/geocode/json?address=WashingtonDC&sensor=false")
print(json)
}
func getJson(url: String) -> AnyObject {
var json:AnyObject = [:]
let urlPath = NSURL(string: url)
let urlRequest = NSURLRequest(URL: urlPath!)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)
let task = session.dataTaskWithRequest(urlRequest, completionHandler: {
(data, response, error) in
if error != nil {
print("Error")
} else {
do {
json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
print(json)
} catch {
print("json error")
}
}
})
task.resume()
return json
}
}
【问题讨论】:
-
旁注:我觉得我并没有真正正确地构造 json 变量的设置,所以那里的任何反馈也很有帮助!