函数未从闭包内返回值

时间:2019-06-13 11:54:53

标签: ios swift closures

我无法弄清楚为什么以下函数不返回:

func getCurrentWeather(cityID: Int) -> Weather? {
    let cityIDAsString = String(cityID)
    guard let url = getCityWeatherURL(from: cityIDAsString) else { return nil }
    var weather: Weather?

    self.data(url: url, sucess: { (data) in
        weather = self.convertDataToWeather(data: data)
        print(weather)
    }) { (error) in
        print(#function, error)
    }
    print(weather)
    return weather
}

(我尚未发布getCityWeatherURL,因为在打印其值时该方法有效。)

当我第一次打印天气时,它是正确的而不是零,所以我知道我的其他功能正常工作。但是当我稍后尝试返回weather的值时,它返回nil。

其他相关功能是我认为的:

private func data(url: URL, sucess: @escaping (Data) -> Void, failure: @escaping (Error) -> Void) {
    let task = URLSession.shared.dataTask(with: url) { (data, _, error) in
        if let error = error {
            failure(error)
        } else if let data = data {
            sucess(data)
        }
    }
    task.resume()
}

如果任何人都能发现我的问题,我将不胜感激! (也欢迎在我的通用代码上注明!)

0 个答案:

没有答案