我正在尝试设置一个新的SwiftUI天气应用程序,它使用OpenWeatherMap Api字符串API name}&appid={API key}“在城市中传递。我设置了我的contentView、模型和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、型号和viewModel如下:
ContentView
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
}ViewModel
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()
}
}错误消息不明确。你知道可能出了什么问题吗?感谢您的反馈!
发布于 2021-11-10 05:36:34
这可能是因为你的型号不正确。试试这个:
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://stackoverflow.com/questions/69908129
复制相似问题