问题描述
我在哪里做错了?这是我第一次尝试使用MVVM版本。
查看DidLoad:
let weather = WeatherProvider.shared
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
guard let weather = weather.getWeather(city: "Erenler") else { return }
print(weather)
}
型号:
struct WeatherRoot: Codable {
// MARK: - Properties
var city_name: String
var lon: String
var timezone: String
var lat: String
var country_code: String
var state_code: String
var data: [WeatherData]
}
struct WeatherData: Codable {
// MARK: - Properties
var low_temp: Double
var max_temp: Double
var min_temp: Double
var datetime: String
var weather: Weather
var temp: Double
}
struct Weather: Codable {
// MARK: - Properties
var icon: String
var description: String
}
天气根视图模型:
我不能在这里使用[WeatherDataViewModel]而不是[weatherdata]吗?
struct WeatherRootViewModel {
private var weatherRoot: WeatherRoot?
init(weatherRoot: WeatherRoot) {
self.weatherRoot = weatherRoot
}
var cityName: String {
return weatherRoot?.city_name ?? "nil"
}
var lon: String {
return weatherRoot?.lon ?? ""
}
var lat: String {
return weatherRoot?.lat ?? ""
}
var data: [WeatherData] {
return weatherRoot?.data ?? []
}
}
天气数据查看模型: 我不能在这里使用WeatherViewModel代替Weather吗? struct WeatherDataViewModel { 私人var weatherData:WeatherData?
init(weatherData: WeatherData) {
self.weatherData = weatherData
}
var lowTemp: Double {
return weatherData?.low_temp ?? 0.0
}
var maxTemp: Double {
return weatherData?.max_temp ?? 0.0
}
var weather: Weather {
return weatherData?.weather ?? Weather(icon: "",description: "")
}
var temp: Double {
return weatherData?.temp ?? 0.0
}
}
天气视图模型
struct WeatherViewModel {
private var weather: Weather?
init(weather: Weather) {
self.weather = weather
}
var icon: String {
return weather?.icon ?? ""
}
var description: String {
return weather?.description ?? ""
}
}
我认为问题出在这里。 天气提供商:
class WeatherProvider {
static let shared = WeatherProvider()
private init() {
}
func getWeather(city: String) -> WeatherRootViewModel? {
var dataSerialized: WeatherRoot?
let url = URL(string: "https://api.weatherbit.io/v2.0/forecast/daily?city=\(city)&country=Turkey&lang=tr&key=c1373952f50d4d8a85c0dd4dee6a89a")!
URLSession.shared.dataTask(with: url) { (data,_,_) in
do {
dataSerialized = try JSONDecoder().decode(WeatherRoot.self,from: data!)
} catch {
print("error: \(error)")
}
}.resume()
if let weather = dataSerialized.self {
print(weather)
return WeatherRootViewModel(weatherRoot: weather)
}
return nil
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)