我无法弄清楚为什么以下函数不返回:
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()
}
如果任何人都能发现我的问题,我将不胜感激! (也欢迎在我的通用代码上注明!)