在swift中返回值URLSession.shared.dataTask

时间:2017-09-14 05:03:56

标签: ios swift swift4

我刚刚开始在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中的数据传递给要使用processJson函数处理的类中的变量,但由于dataTask函数不返回任何值,并且JSON变量是本地存储的我不能在类之外处理info变量(它总是返回nil)。我想知道这个问题的解决方案是什么?我weather.getCoordinate()面临同样的问题。

1 个答案:

答案 0 :(得分:3)

您可以使用完成块返回值。添加完成块你的功能就像这样

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()

当你调用此函数时,它会返回你的信息

  

解析(lat,long,{info in       processJson(信息)       })