Хорошо, так что просто начать, мой код Хереса:«я» захвачено закрытием до того были инициализированы все члены
import UIKit
import ForecastIO
class Weather {
var temp: Float
var condition: String
var wind: Float
var precip: Float
init() {
DarkSkyClient(apiKey: "<api key>").getForecast(latitude: Utils().getLat(), longitude: Utils().getLong()) { result in
switch result {
case .success(let currentForecast, _):
self.temp = (currentForecast.currently?.temperature)!
self.condition = (currentForecast.currently?.summary)!
self.wind = (currentForecast.currently?.windSpeed)!
self.precip = (currentForecast.currently?.precipitationProbability)!
case .failure(let error):
print(error)
}
}
}
}
Так что моя ошибка возникает потому, что я пытаюсь инициализировать темп внутри из Вызов API. Я знаю, что это не самый надежный способ сделать это, но я пытаюсь сначала заставить его работать.
Первая ошибка:
'self' captured by a closure before all members were initialized
на линии DarkSkyClient(apiKey: "").getForecast(latitude: Utils().getLat(), longitude: Utils().getLong()) { result in
Моя вторая ошибка:
Return from initializer without initializing all stored properties
на втором к последнему }
Теперь, очевидно, я m не инициализирует право. Я не могу найти правильный способ сделать то, что моя конечная цель. Может быть, я делаю это совершенно неправильно?
Объект не может асинхронно инициализировать себя. Ваш вызов API должен вызываться другим объектом, который должен вызывать инициализатор для вашего класса «Погода» и передавать значения, полученные из API. – dan
@dan Я понимаю эту часть, я просто не понимаю, как правильно это сделать, с другим объектом. (Также спасибо за помощь) –
Вы можете объявить свои переменные-члены как опции – odlund