在初始化所有成员之前,闭包捕获了“自我”

在初始化所有成员之前,闭包捕获了“自我”,第1张

初始化所有成员之前,闭包捕获了“自我”

我很容易猜测您正在遇到并发问题。在异步调用DarkSkyClient返回之前,您可能正在尝试访问对象的属性(如果我弄错了,请提前道歉)。即事件的顺序是…

  1. 初始化天气对象,将temp设置为0
  2. 开始调用DarkSkyClient,在后台运行
  3. 读取temp变量-嘿,它是0!
  4. 调用DarkSkyClient完成,将温度设置为您真正想要的值。坏

因此,您真正需要做的是切换到控制模式的反转:

class Weather {    var temp: Float    var condition: String    var wind: Float    var precip: Float    init(forecast: Forecast) {        temp = (forecast.currently?.temperature)!        condition = (forecast.currently?.summary)!        wind = (forecast.currently?.windSpeed)!        precip = (forecast.currently?.precipitationProbability)!    }    static func getWeather() {        DarkSkyClient(apiKey: "<api key>").getForecast(latitude: Utils().getLat(), longitude: Utils().getLong()) { result in switch result { case .success(let currentForecast, _):     let weather = Weather(forecast: currentForecast)     // Display the weather somewhere     doSomethingWith(weather: weather) case .failure(let error):     print(error) }        }    }    }

如果您不熟悉使用异步API进行开发,则值得您花些时间来阅读该主题;这可能非常棘手(可悲的是,我对好的入门书没有任何建议)。希望这可以帮助!



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4978028.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存