我刚开始编码Swift,我有以下解析 JSON 的代码
func parse (latitude: Double, longtitude: Double){
let jsonUrlString = "https://api.darksky.net/forecast/apiKey/\(latitude),\(longtitude)"
guard let url = URL(string: jsonUrlString) else{
return
}
var information: forecast?
URLSession.shared.dataTask(with: url) { (data, res, err) in
guard let data = data else {
return
}
do {
let json = try JSONDecoder().decode(forecast.self, from: data)
self.info = json
} catch {
print("didnt work")
}
}.resume()
processJson(info)
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我想将存储在 JSON 中的数据传递给要使用processJson函数处理的类中的变量,但是由于 dataTask 函数不返回任何值,并且 JSON 变量是本地存储的,因此我无法在类之外处理 info 变量(它总是返回零)。我想知道这个问题的解决方案是什么?我面临同样的问题weather.getCoordinate()。
小智 7
您可以使用完成块来返回值。添加完成块您的功能是这样的
func parse (latitude: Double, longtitude: Double, completion: @escaping ((AnyObject) -> Void)){
let jsonUrlString = "https://api.darksky.net/forecast/apiKey/\(latitude),\(longtitude)"
guard let url = URL(string: jsonUrlString) else{
return
}
var information: forecast?
URLSession.shared.dataTask(with: url) { (data, res, err) in
guard let data = data else {
return
}
do {
let json = try JSONDecoder().decode(forecast.self, from: data)
self.info = json
completion(info)
} catch {
print("didnt work")
}
}.resume()
Run Code Online (Sandbox Code Playgroud)
当你调用这个函数时,它会返回你的信息
解析(经纬度,长,{processJson 中的信息(信息)})
| 归档时间: |
|
| 查看次数: |
16827 次 |
| 最近记录: |