我正在嘗試設定一個新的 SwiftUI 天氣應用程式,它使用 OpenWeatherMap Api 字串“api.openweathermap.org/data/2.5/weather?q={city name}&appid={API key}”來傳遞一個城市。我設定了 contentView、model 和 viewModel 以回傳城市名稱、溫度和天氣描述,但在運行應用程式時仍然出現以下錯誤:
2021-11-09 23:26:56.923188-0500 SwftUIMVVMWeatherDemo[13982:634181] [boringssl] boringssl_metrics_log_metric_block_invoke(144) Failed to log metrics
failed
我的contentView、model、viewModel如下:
內容視圖
import SwiftUI
struct ContentView: View {
@StateObject var viewModel = WeatherViewModel()
var body: some View {
NavigationView {
VStack {
Text(viewModel.name)
.font(.system(size: 32))
Text(viewModel.temp)
.font(.system(size: 44))
Text(viewModel.descriptionText)
.font(.system(size: 24))
Spacer()
}
.navigationTitle("Weather MVVM")
}.padding()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
模型
import Foundation
struct WeatherModel: Codable {
let name: String
let main: CurrentWeather
}
struct CurrentWeather: Codable {
let temp: Float
let weather: [WeatherInfo]
}
struct WeatherInfo: Codable {
let description: String
}
視圖模型
import Foundation
class WeatherViewModel: ObservableObject {
@Published var name: String = "-"
@Published var temp: String = "-"
@Published var descriptionText: String = "-"
init() {
fetchWeather()
}
func fetchWeather() {
guard let url = URL(string: "https://api.openweathermap.org/data/2.5/weather?q=chicago&appid=<myAPIKeyGoesHere>") else {
return
}
let task = URLSession.shared.dataTask(with: url) { data, _, error in
// get data
guard let data = data, error == nil else {
return
}
//convert data to model
do {
let model = try JSONDecoder().decode(WeatherModel.self, from: data)
DispatchQueue.main.async {
self.name = model.name
self.temp = "\(model.main.temp)"
self.descriptionText = model.main.weather.first?.description ?? "No Description"
}
}
catch {
print("failed")
}
}
task.resume()
}
}
錯誤資訊含糊不清。知道可能有什么問題嗎?感謝您的反饋!
uj5u.com熱心網友回復:
這可能是由于您的模型不正確。嘗試這個:
struct WeatherModel: Codable {
let name: String
let main: CurrentWeather
let weather: [WeatherInfo] // <--- here
}
struct CurrentWeather: Codable {
let temp: Float
// let weather: [WeatherInfo] // <--- NOT here
}
這座城市也是Chicago,雖然它似乎與chicago
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/354973.html
上一篇:不能從減速器功能控制臺日志狀態?
下一篇:Swifui背景顏色沒有改變
