У меня есть класс 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