gpt4 book ai didi

ios - 在等待属性初始化的 init 中调用函数

转载 作者:行者123 更新时间:2023-12-01 21:58:11 25 4
gpt4 key购买 nike

我有一个 Observable Object 类来存储我的应用程序的预测对象

该类如下所示:

final class ForecastData: ObservableObject {
@Published var forecast: DarkSkyResponse

public func getForecast(at location: CLLocation) {
let request = DarkSkyRequest(key: "KEYGOESHERE")
let point = DarkSkyRequest.Point(location.coordinate.latitude, location.coordinate.longitude)

guard let url = request.buildURL(point: point) else {
//Handle this better
preconditionFailure("Failed to construct URL")
}

let task = URLSession.shared.dataTask(with: url) {
data, response, error in

DispatchQueue.main.async {
guard let data = data else {
//Handle this better
fatalError("No Data Recieved")
}
guard let forecast = DarkSkyResponse(data: data) else {
//Handle this better
fatalError("Decoding Failed")
}
self.forecast = forecast
}
}
task.resume()
}

init() {
self.getForecast(at: CLLocation(latitude: 37.334987, longitude: -122.009066))
}
}

第一部分只是生成一个 URL 来访问 API。然后我开始一个 URLSession它下载数据,然后将其解析为 DarkSkyResponse目的。最后我设置了 @Published预测对象的变量。

我的问题是当我在初始化程序中调用该函数时,由于未初始化预测属性而出现错误。解决这个问题的最佳方法是什么?我应该在哪里调用该函数?
顺便说一句,我在我的 SwiftUI View 中使用这个类,使用 @ObservedObject属性包装器

最佳答案

Case1:使用可选(需要在View中处理)

@Published var forecast: DarkSkyResponse?

案例2:使用一些默认实例
@Published var forecast = DarkSkyResponse()

两种变体都是等效的并且可以接受,所以只是根据您的喜好。

关于ios - 在等待属性初始化的 init 中调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60959771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com