如何将嵌套数组转换为mvvm模型

问题描述

我在哪里做错了?这是我第一次尝试使用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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...