swift 中的返回值 URLSession.shared.dataTask
Returning values URLSession.shared.dataTask in swift
我刚开始在 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)
}
我的问题是我想将存储在 JSON 中的数据传递给 class 中的变量,以便使用 processJson
函数进行处理,但是由于 dataTask 函数不return 任何值,并且 JSON 变量在本地存储我无法处理 class 之外的信息变量(它总是 return 为零)。我想知道这个问题的解决方案是什么?我在 weather.getCoordinate()
.
中遇到了同样的问题
您可以使用完成块来 return 值。添加完成块以实现这样的功能
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()
当你调用这个函数时,它return你的信息
parse( lat, long, {info in
processJson(info)
})
我刚开始在 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)
}
我的问题是我想将存储在 JSON 中的数据传递给 class 中的变量,以便使用 processJson
函数进行处理,但是由于 dataTask 函数不return 任何值,并且 JSON 变量在本地存储我无法处理 class 之外的信息变量(它总是 return 为零)。我想知道这个问题的解决方案是什么?我在 weather.getCoordinate()
.
您可以使用完成块来 return 值。添加完成块以实现这样的功能
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()
当你调用这个函数时,它return你的信息
parse( lat, long, {info in processJson(info) })