【发布时间】:2021-05-31 15:16:12
【问题描述】:
我正在使用 MVVM 架构来学习开发用于学习目的的小型天气应用程序。
查看
class ViewController: UIViewController {
private var cityDataViewModel = CityDataViewModel()
private var data = [ConsolidatedWeather]()
@IBOutlet weak var label1: UILabel!
@IBOutlet weak var label2: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
loadCityData()
}
func loadCityData(){
print("loadCityData")
cityDataViewModel.getCityData {
}
}
}
视图模型
class CityDataViewModel{
private var networkManager = CityNetworkManager()
private var weatherNetworkManager = WeatherNetworkManager()
var weatherModel = [ConsolidatedWeather]()
var myStruct :[WeatherModel] = []
var weatherState: String?
var minTemp: Double?
var maxTemp: Double?
var currentTemperature: Double?
var summary: String?
var dateString: String = ""
//MARK: - Get cityInformation
func getCityData(completion: @escaping () -> ()) {
networkManager.getCityDataNetworkCall { [weak self](result) in
switch result{
case .success(let information):
information.forEach { (data) in
print("\(data.title) || \(data.locationType) || \(data.woeid) || \(data.lattLong)")
print("loadCityData 3")
self?.getCityWeatherInformation(with: data.woeid)
print("loadCityData 4")
}
completion()
case .failure(let error):
print(error)
}
}
}
//MARK: - Get Weather data
func getCityWeatherInformation(with woeid: Int){
//[weak self]
weatherNetworkManager.getWeatherDataNetworkCall(cityId: woeid) {[weak self] (result) in
print("loadCityData 5")
switch result{
case .success(let listOfData):
self?.weatherModel = listOfData.consolidatedWeather
}
case .failure(let error):
print(error)
}
}
}
var ttile: String{
return weatherState ?? ""
}
}
- 从视图来看,我正在向 ViewModel 发送调用以使用
func getCityDat()获取 cityId - 在获得
cityId后,我致电func getCityWeatherInformation(with woeid: Int)获取详细的天气数据。我已成功从服务器获取这些数据。
如何将该信息发送到view 以更新我的viewController?
【问题讨论】:
-
你有几个选择,你可以使用闭包/块或协议
-
@SandeepBhandari 会给我一个样品吗?
-
我猜你已经有了答案:)
-
@SandeepBhandari 我得到的答案喜欢涵盖不同的方式。我想在 ViewModel 上做所有事情。我的视图将只获得数据。