ios - Returning values URLSession.shared.dataTask in swift -
this question has answer here:
i started coding in swift
, have following code parses 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 } { let json = try jsondecoder().decode(forecast.self, from: data) self.info = json } catch { print("didnt work") } }.resume() processjson(info) }
my problem want pass data stored in json variable in class processed using processjson
function since datatask function not return values, , json variable locally stored cannot process info variable outside class (it returns nil). wondering solution problem? i'm facing same problem weather.getcoordinate()
.
you can use completion block return value. add completion block function this
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 } { let json = try jsondecoder().decode(forecast.self, from: data) self.info = json completion(info) } catch { print("didnt work") } }.resume()
and when call function, return info
parse( lat, long, {info in processjson(info) })
Comments
Post a Comment