Codable/Decodable should decode Array with Strings

后端 未结 1 1741
天涯浪人
天涯浪人 2021-01-19 00:41

Why is the names Array not decoding?

Prepared for Playground, Simple paste this into your playground

import Foundation

struct Country : Decodable {
         


        
相关标签:
1条回答
  • 2021-01-19 00:58

    You have defined names as an optional property of Country. If your intention is that this key may not be present in the JSON then use decodeIfPresent:

    extension Country {
        public init(from decoder: Decoder) throws {
            let values = try decoder.container(keyedBy: CodingKeys.self)
            names = try values.decodeIfPresent([String].self, forKey: .names)
        }
    }
    

    This method returns nil if the container does not have a value associated with key, or if the value is null.

    But actually you can just omit your custom init(from decoder: Decoder) implementation (and the enum CodingKeys), because that is the default behaviour and will be synthesized automatically.

    Remark: An implicit variable error is defined in any catch clause, so

    } catch {
        print(error.localizedDescription)
    }
    

    can be more informative than just a print("error") (although not in this particular case).

    0 讨论(0)
提交回复
热议问题