swift - 当我想使用 JSONDecoder() 解码数据时,某些变量返回 nil

标签 swift swift4 urlsession jsondecoder

我正在使用 Urlsession 和 JSONDecoder 来获取和解码我的数据,但不知何故,Weather 结构上的某些变量在解码时返回 nil。它可能与 utf8 有关,但我不知道如何处理。

 var request = URLRequest(url: URL(string: "myurlstring")
    URLSession.shared.dataTask(with: request) {(data,resp,err) in
        guard let data = data else { return }
        do{
            let decoder = JSONDecoder()
            let weatherData = try decoder.decode(Weather.self, from: data)
            completion(weatherData,nil)
        } catch let err {
            completion(nil,err)
        }

    }.resume()

我得到了零值,正如你在这里看到的:

但是在 postman 上我可以获得非零结果

这是我从 postman 那里获得的原始 json 数据

{"lat":39.92,"lon":32.85,"timezone":"Europe/Istanbul","timezone_offset":10800,"current":{"dt":1609623860,"sunrise":1609650620,"sunset":1609684530,"temp":2.26,"feels_like":-0.99,"pressure":1026,"humidity":72,"dew_point":-2,"uvi":0,"clouds":0,"visibility":10000,"wind_speed":1.37,"wind_deg":72,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}]},"minutely":[{"dt":1609623900,"precipitation":0},{"dt":1609623960,"precipitation":0},{"dt":1609624020,"precipitation":0},{"dt":1609624080,"precipitation":0},{"dt":1609624140,"precipitation":0},{"dt":1609624200,"precipitation":0},{"dt":1609624260,"precipitation":0},{"dt":1609624320,"precipitation":0},{"dt":1609624380,"precipitation":0},{"dt":1609624440,"precipitation":0},{"dt":1609624500,"precipitation":0},{"dt":1609624560,"precipitation":0},{"dt":1609624620,"precipitation":0},{"dt":1609624680,"precipitation":0},{"dt":1609624740,"precipitation":0},{"dt":1609624800,"precipitation":0},{"dt":1609624860,"precipitation":0},{"dt":1609624920,"precipitation":0},{"dt":1609624980,"precipitation":0},{"dt":1609625040,"precipitation":0},{"dt":1609625100,"precipitation":0},{"dt":1609625160,"precipitation":0},{"dt":1609625220,"precipitation":0},{"dt":1609625280,"precipitation":0},{"dt":1609625340,"precipitation":0},{"dt":1609625400,"precipitation":0},{"dt":1609625460,"precipitation":0},{"dt":1609625520,"precipitation":0},{"dt":1609625580,"precipitation":0},{"dt":1609625640,"precipitation":0},{"dt":1609625700,"precipitation":0},{"dt":1609625760,"precipitation":0},{"dt":1609625820,"precipitation":0},{"dt":1609625880,"precipitation":0},{"dt":1609625940,"precipitation":0},{"dt":1609626000,"precipitation":0},{"dt":1609626060,"precipitation":0},{"dt":1609626120,"precipitation":0},{"dt":1609626180,"precipitation":0},{"dt":1609626240,"precipitation":0},{"dt":1609626300,"precipitation":0},{"dt":1609626360,"precipitation":0},{"dt":1609626420,"precipitation":0},{"dt":1609626480,"precipitation":0},{"dt":1609626540,"precipitation":0},{"dt":1609626600,"precipitation":0},{"dt":1609626660,"precipitation":0},{"dt":1609626720,"precipitation":0},{"dt":1609626780,"precipitation":0},{"dt":1609626840,"precipitation":0},{"dt":1609626900,"precipitation":0},{"dt":1609626960,"precipitation":0},{"dt":1609627020,"precipitation":0},{"dt":1609627080,"precipitation":0},{"dt":1609627140,"precipitation":0},{"dt":1609627200,"precipitation":0},{"dt":1609627260,"precipitation":0},{"dt":1609627320,"precipitation":0},{"dt":1609627380,"precipitation":0},{"dt":1609627440,"precipitation":0},{"dt":1609627500,"precipitation":0}],"hourly":[{"dt":1609621200,"temp":2.26,"feels_like":-0.99,"pressure":1026,"humidity":72,"dew_point":-2,"uvi":0,"clouds":0,"visibility":10000,"wind_speed":1.37,"wind_deg":72,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"pop":0},{"dt":1609624800,"temp":3.06,"feels_like":-0.06,"pressure":1026,"humidity":73,"dew_point":-1.15,"uvi":0,"clouds":0,"visibility":10000,"wind_speed":1.36,"wind_deg":73,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"pop":0},{"dt":1609628400,"temp":3.55,"feels_like":0.24,"pressure":1026,"humidity":74,"dew_point":-0.57,"uvi":0,"clouds":0,"visibility":10000,"wind_speed":1.76,"wind_deg":69,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"pop":0},{"dt":1609632000,"temp":3.7,"feels_like":0.26,"pressure":1026,"humidity":74,"dew_point":-0.44,"uvi":0,"clouds":0,"visibility":10000,"wind_speed":1.98,"wind_deg":68,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"pop":0},{"dt":1609635600,"temp":3.3,"feels_like":-0.02,"pressure":1026,"humidity":77,"dew_point":-0.3,"uvi":0,"clouds":0,"visibility":10000,"wind_speed":1.83,"wind_deg":66,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"pop":0},{"dt":1609639200,"temp":3.08,"feels_like":-0.29,"pressure":1026,"humidity":78,"dew_point":-1.55,"uvi":0,"clouds":0,"visibility":10000,"wind_speed":1.9,"wind_deg":68,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"pop":0},{"dt":1609642800,"temp":2.68,"feels_like":-0.58,"pressure":1026,"humidity":80,"dew_point":-1.74,"uvi":0,"clouds":2,"visibility":10000,"wind_speed":1.73,"wind_deg":61,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"pop":0},{"dt":1609646400,"temp":2.91,"feels_like":-0.69,"pressure":1026,"humidity":78,"dew_point":-1.77,"uvi":0,"clouds":1,"visibility":10000,"wind_speed":2.19,"wind_deg":63,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"pop":0},{"dt":1609650000,"temp":2.31,"feels_like":-0.83,"pressure":1026,"humidity":82,"dew_point":-1.84,"uvi":0,"clouds":15,"visibility":10000,"wind_speed":1.56,"wind_deg":70,"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}],"pop":0},{"dt":1609653600,"temp":3.76,"feels_like":0.53,"pressure":1026,"humidity":74,"dew_point":-1.75,"uvi":0.2,"clouds":29,"visibility":10000,"wind_speed":1.69,"wind_deg":70,"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}],"pop":0},{"dt":1609657200,"temp":6.01,"feels_like":2.76,"pressure":1026,"humidity":63,"dew_point":-1.27,"uvi":0.55,"clouds":100,"visibility":10000,"wind_speed":1.7,"wind_deg":67,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],"pop":0},{"dt":1609660800,"temp":7.55,"feels_like":4.39,"pressure":1026,"humidity":57,"dew_point":-1.22,"uvi":1.1,"clouds":100,"visibility":10000,"wind_speed":1.59,"wind_deg":74,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],"pop":0},{"dt":1609664400,"temp":8.65,"feels_like":5.61,"pressure":1025,"humidity":53,"dew_point":-1,"uvi":1.56,"clouds":100,"visibility":10000,"wind_speed":1.42,"wind_deg":79,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],"pop":0},{"dt":1609668000,"temp":9.47,"feels_like":6.36,"pressure":1024,"humidity":50,"dew_point":-0.8,"uvi":1.68,"clouds":100,"visibility":10000,"wind_speed":1.52,"wind_deg":86,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],"pop":0},{"dt":1609671600,"temp":9.96,"feels_like":6.64,"pressure":1023,"humidity":49,"dew_point":-0.72,"uvi":1.41,"clouds":100,"visibility":10000,"wind_speed":1.86,"wind_deg":84,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],"pop":0},{"dt":1609675200,"temp":10.16,"feels_like":7.02,"pressure":1022,"humidity":48,"dew_point":-0.76,"uvi":0.9,"clouds":100,"visibility":10000,"wind_speed":1.58,"wind_deg":79,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],"pop":0},{"dt":1609678800,"temp":9.96,"feels_like":7.12,"pressure":1022,"humidity":49,"dew_point":-0.6,"uvi":0.39,"clouds":100,"visibility":10000,"wind_speed":1.17,"wind_deg":76,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],"pop":0},{"dt":1609682400,"temp":8.25,"feels_like":5.56,"pressure":1023,"humidity":56,"dew_point":0.04,"uvi":0,"clouds":100,"visibility":10000,"wind_speed":1,"wind_deg":81,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],"pop":0},{"dt":1609686000,"temp":6.37,"feels_like":3.53,"pressure":1023,"humidity":63,"dew_point":-0.42,"uvi":0,"clouds":100,"visibility":10000,"wind_speed":1.19,"wind_deg":85,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"pop":0},{"dt":1609689600,"temp":6.08,"feels_like":3.17,"pressure":1023,"humidity":64,"dew_point":-0.51,"uvi":0,"clouds":100,"visibility":10000,"wind_speed":1.28,"wind_deg":80,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"pop":0},{"dt":1609693200,"temp":5.66,"feels_like":2.84,"pressure":1024,"humidity":66,"dew_point":-0.57,"uvi":0,"clouds":100,"visibility":10000,"wind_speed":1.15,"wind_deg":89,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"pop":0},{"dt":1609696800,"temp":5.35,"feels_like":2.6,"pressure":1024,"humidity":67,"dew_point":-0.7,"uvi":0,"clouds":100,"visibility":10000,"wind_speed":1.03,"wind_deg":88,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"pop":0},{"dt":1609700400,"temp":5.17,"feels_like":2.55,"pressure":1024,"humidity":68,"dew_point":-0.81,"uvi":0,"clouds":100,"visibility":10000,"wind_speed":0.86,"wind_deg":90,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"pop":0},{"dt":1609704000,"temp":4.66,"feels_like":2.12,"pressure":1024,"humidity":70,"dew_point":-1.03,"uvi":0,"clouds":100,"visibility":10000,"wind_speed":0.72,"wind_deg":88,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"pop":0},{"dt":1609707600,"temp":4.11,"feels_like":1.43,"pressure":1023,"humidity":72,"dew_point":-1.31,"uvi":0,"clouds":100,"visibility":10000,"wind_speed":0.89,"wind_deg":87,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"pop":0},{"dt":1609711200,"temp":3.65,"feels_like":1.2,"pressure":1023,"humidity":75,"dew_point":-1.44,"uvi":0,"clouds":100,"visibility":10000,"wind_speed":0.59,"wind_deg":110,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"pop":0},{"dt":1609714800,"temp":3.17,"feels_like":1,"pressure":1023,"humidity":77,"dew_point":-1.44,"uvi":0,"clouds":100,"visibility":10000,"wind_speed":0.17,"wind_deg":168,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"pop":0},{"dt":1609718400,"temp":2.75,"feels_like":0.51,"pressure":1023,"humidity":80,"dew_point":-1.31,"uvi":0,"clouds":98,"visibility":10000,"wind_speed":0.29,"wind_deg":36,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"pop":0},{"dt":1609722000,"temp":2.38,"feels_like":-0.1,"pressure":1023,"humidity":82,"dew_point":-1.33,"uvi":0,"clouds":37,"visibility":10000,"wind_speed":0.63,"wind_deg":81,"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03n"}],"pop":0},{"dt":1609725600,"temp":2.1,"feels_like":-0.49,"pressure":1023,"humidity":83,"dew_point":-1.59,"uvi":0,"clouds":19,"visibility":10000,"wind_speed":0.77,"wind_deg":88,"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}],"pop":0},{"dt":1609729200,"temp":1.86,"feels_like":-0.54,"pressure":1023,"humidity":84,"dew_point":-1.77,"uvi":0,"clouds":12,"visibility":10000,"wind_speed":0.48,"wind_deg":93,"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}],"pop":0},{"dt":1609732800,"temp":1.65,"feels_like":-0.77,"pressure":1023,"humidity":85,"dew_point":-1.93,"uvi":0,"clouds":9,"visibility":10000,"wind_speed":0.5,"wind_deg":108,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"pop":0},{"dt":1609736400,"temp":1.62,"feels_like":-0.93,"pressure":1023,"humidity":86,"dew_point":-1.92,"uvi":0,"clouds":8,"visibility":10000,"wind_speed":0.71,"wind_deg":125,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"pop":0},{"dt":1609740000,"temp":3.22,"feels_like":0.54,"pressure":1023,"humidity":77,"dew_point":-1.43,"uvi":0.2,"clouds":6,"visibility":10000,"wind_speed":0.91,"wind_deg":114,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01d"}],"pop":0},{"dt":1609743600,"temp":6.78,"feels_like":4.06,"pressure":1023,"humidity":60,"dew_point":-1.04,"uvi":0.59,"clouds":0,"visibility":10000,"wind_speed":0.96,"wind_deg":115,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01d"}],"pop":0},{"dt":1609747200,"temp":8.01,"feels_like":5.38,"pressure":1022,"humidity":56,"dew_point":-0.88,"uvi":1.18,"clouds":0,"visibility":10000,"wind_speed":0.87,"wind_deg":131,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01d"}],"pop":0},{"dt":1609750800,"temp":8.83,"feels_like":6.08,"pressure":1021,"humidity":53,"dew_point":-0.47,"uvi":1.66,"clouds":29,"visibility":10000,"wind_speed":1.05,"wind_deg":124,"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}],"pop":0},{"dt":1609754400,"temp":9.46,"feels_like":6.49,"pressure":1020,"humidity":51,"dew_point":0.02,"uvi":1.74,"clouds":47,"visibility":10000,"wind_speed":1.37,"wind_deg":145,"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}],"pop":0},{"dt":1609758000,"temp":9.94,"feels_like":6.92,"pressure":1019,"humidity":52,"dew_point":0.55,"uvi":1.46,"clouds":58,"visibility":10000,"wind_speed":1.59,"wind_deg":155,"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}],"pop":0},{"dt":1609761600,"temp":10.25,"feels_like":7.2,"pressure":1018,"humidity":52,"dew_point":0.95,"uvi":0.93,"clouds":65,"visibility":10000,"wind_speed":1.7,"wind_deg":156,"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}],"pop":0},{"dt":1609765200,"temp":10.11,"feels_like":6.92,"pressure":1018,"humidity":54,"dew_point":1.3,"uvi":0.45,"clouds":98,"visibility":10000,"wind_speed":1.98,"wind_deg":155,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],"pop":0},{"dt":1609768800,"temp":8.43,"feels_like":5.34,"pressure":1018,"humidity":62,"dew_point":1.79,"uvi":0,"clouds":49,"visibility":10000,"wind_speed":1.92,"wind_deg":138,"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}],"pop":0},{"dt":1609772400,"temp":6.46,"feels_like":3.08,"pressure":1019,"humidity":70,"dew_point":1.58,"uvi":0,"clouds":32,"visibility":10000,"wind_speed":2.29,"wind_deg":116,"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03n"}],"pop":0},{"dt":1609776000,"temp":5.78,"feels_like":2.68,"pressure":1019,"humidity":74,"dew_point":1.65,"uvi":0,"clouds":25,"visibility":10000,"wind_speed":1.93,"wind_deg":109,"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03n"}],"pop":0},{"dt":1609779600,"temp":5.51,"feels_like":2.42,"pressure":1019,"humidity":76,"dew_point":1.65,"uvi":0,"clouds":20,"visibility":10000,"wind_speed":1.94,"wind_deg":102,"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}],"pop":0},{"dt":1609783200,"temp":5.2,"feels_like":2.13,"pressure":1019,"humidity":77,"dew_point":1.66,"uvi":0,"clouds":17,"visibility":10000,"wind_speed":1.88,"wind_deg":98,"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}],"pop":0},{"dt":1609786800,"temp":4.96,"feels_like":1.8,"pressure":1019,"humidity":77,"dew_point":1.41,"uvi":0,"clouds":16,"visibility":10000,"wind_speed":1.96,"wind_deg":98,"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}],"pop":0},{"dt":1609790400,"temp":4.73,"feels_like":1.54,"pressure":1019,"humidity":77,"dew_point":1.14,"uvi":0,"clouds":38,"visibility":10000,"wind_speed":1.94,"wind_deg":99,"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03n"}],"pop":0}],"daily":[{"dt":1609664400,"sunrise":1609650620,"sunset":1609684530,"temp":{"day":8.65,"min":2.26,"max":10.16,"night":4.66,"eve":6.37,"morn":2.68},"feels_like":{"day":5.61,"night":2.12,"eve":3.53,"morn":-0.58},"pressure":1025,"humidity":53,"dew_point":-1,"wind_speed":1.42,"wind_deg":79,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],"clouds":100,"pop":0,"uvi":1.68},{"dt":1609750800,"sunrise":1609737022,"sunset":1609770983,"temp":{"day":8.83,"min":1.62,"max":10.25,"night":4.73,"eve":6.46,"morn":1.86},"feels_like":{"day":6.08,"night":1.54,"eve":3.08,"morn":-0.54},"pressure":1021,"humidity":53,"dew_point":-0.47,"wind_speed":1.05,"wind_deg":124,"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}],"clouds":29,"pop":0,"uvi":1.74},{"dt":1609837200,"sunrise":1609823421,"sunset":1609857436,"temp":{"day":6.76,"min":3.75,"max":6.93,"night":3.88,"eve":5.25,"morn":4.19},"feels_like":{"day":4.84,"night":1.69,"eve":2.76,"morn":0.95},"pressure":1019,"humidity":70,"dew_point":1.73,"wind_speed":0.28,"wind_deg":74,"weather":[{"id":501,"main":"Rain","description":"moderate rain","icon":"10d"}],"clouds":100,"pop":0.84,"rain":3.33,"uvi":0.92},{"dt":1609923600,"sunrise":1609909818,"sunset":1609943891,"temp":{"day":7.92,"min":2.25,"max":9.68,"night":5.61,"eve":6.62,"morn":2.25},"feels_like":{"day":5.61,"night":3.19,"eve":3.93,"morn":-0.48},"pressure":1024,"humidity":75,"dew_point":3.86,"wind_speed":1.35,"wind_deg":138,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],"clouds":85,"pop":0,"uvi":1.53},{"dt":1610010000,"sunrise":1609996213,"sunset":1610030348,"temp":{"day":9.52,"min":3.3,"max":11.03,"night":5.83,"eve":7.61,"morn":3.3},"feels_like":{"day":6.47,"night":2.14,"eve":3.99,"morn":0.96},"pressure":1018,"humidity":59,"dew_point":2.02,"wind_speed":1.94,"wind_deg":193,"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}],"clouds":73,"pop":0,"uvi":1.36},{"dt":1610096400,"sunrise":1610082606,"sunset":1610116805,"temp":{"day":8.46,"min":3.38,"max":10.97,"night":6.64,"eve":7.48,"morn":3.38},"feels_like":{"day":5.89,"night":4.27,"eve":5.51,"morn":0.69},"pressure":1020,"humidity":57,"dew_point":0.64,"wind_speed":0.93,"wind_deg":186,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],"clouds":99,"pop":0,"uvi":2},{"dt":1610182800,"sunrise":1610168997,"sunset":1610203264,"temp":{"day":8.61,"min":7.2,"max":10.59,"night":9.15,"eve":10.06,"morn":7.46},"feels_like":{"day":5.94,"night":6.09,"eve":7.12,"morn":4.51},"pressure":1018,"humidity":74,"dew_point":4.26,"wind_speed":2,"wind_deg":174,"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}],"clouds":100,"pop":0.38,"rain":0.35,"uvi":2},{"dt":1610269200,"sunrise":1610255385,"sunset":1610289724,"temp":{"day":12.17,"min":6.69,"max":14.54,"night":9.62,"eve":10.91,"morn":6.69},"feels_like":{"day":9.55,"night":7.19,"eve":8.57,"morn":3.86},"pressure":1020,"humidity":59,"dew_point":4.61,"wind_speed":1.96,"wind_deg":194,"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}],"clouds":74,"pop":0.51,"rain":0.99,"uvi":2}]}

这是我的天气模型

struct Weather: Codable {
let lat, lon: Double
let timezone: String?
let timezoneOffset: Int?
let current: Current?
let minutely: [Minutely]?
let hourly: [Current]?
let daily: [Daily]?

enum CodingKeys: String, CodingKey {
    case lat, lon, timezone
    case timezoneOffset
    case current, minutely, hourly, daily
}}

struct Current: Codable {
let dt, sunrise, sunset: Int?
let temp, feelsLike: Double?
let pressure, humidity: Int?
let dewPoint, uvi: Double?
let clouds, visibility: Int?
let windSpeed: Double?
let windDeg: Int?
let weather: [WeatherElement]?
let pop: Double?
let rain: Rain?

enum CodingKeys: String, CodingKey {
    case dt, sunrise, sunset, temp
    case feelsLike
    case pressure, humidity
    case dewPoint
    case uvi, clouds, visibility
    case windSpeed
    case windDeg
    case weather, pop, rain
}}

struct Rain: Codable {
let the1H: Double?

enum CodingKeys: String, CodingKey {
    case the1H
}}

struct WeatherElement: Codable {
let id: Int?
let main, weatherDescription, icon: String?

enum CodingKeys: String, CodingKey {
    case id, main
    case weatherDescription
    case icon
}}

struct Daily: Codable {
let dt, sunrise, sunset: Int?
let temp: Temp?
let feelsLike: FeelsLike?
let pressure, humidity: Int?
let dewPoint, windSpeed: Double?
let windDeg: Int?
let weather: [WeatherElement]?
let clouds: Int?
let pop, uvi, rain: Double?

enum CodingKeys: String, CodingKey {
    case dt, sunrise, sunset, temp
    case feelsLike
    case pressure, humidity
    case dewPoint
    case windSpeed
    case windDeg
    case weather, clouds, pop, uvi, rain
}}

struct FeelsLike: Codable {
let day, night, eve, morn: Double?}

struct Temp: Codable {
let day, min, max, night: Double?
let eve, morn: Double?}

struct Minutely: Codable {
let dt, precipitation: Double?}

这是我第一次来这里。对我的错误表示歉意。

最佳答案

问题在于变量的名称,例如:

timezone_offset 应该完全一样,而不是 timezoneOffset

您可以更新枚举 CodingKeys 以避免不良命名实践。

enum CodingKeys: String, CodingKey {
    case lat, lon, timezone
    case timezoneOffset = "timezone_offset"
    case current, minutely, hourly, daily
}}

关于swift - 当我想使用 JSONDecoder() 解码数据时,某些变量返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65545354/

相关文章:

ios - WKWebView 将谷歌搜索结果显示为原始 html

ios - Swift 可解码可选 key

swift - 有人可以帮助将 URLSession 从 Swift 转换为 Kotlin

ios - 我调用 URLSession.share.datatask 并且在它完成之前用户弹出 uiviewcontroller

php - 将一组 ID 从 Swift URLSession 传递到 PHP 以进行 SQL 查询?

swift - 在 Swift 中从数组创建字典

swift - 写入嵌套字典 (Swift 4)

ios - 如何根据两个数组中的数据更改 tableview 单元格的样式详细信息如下

ios - Swift - 如何使 JSONDecoder 正确解析类层次结构中的日期数组

ios - 实例CoreData对象而不保存它