Swift 4 Decodable - Additional Variables

后端 未结 2 1121
小鲜肉
小鲜肉 2021-01-11 12:02

Something I havent figured out or have been able to find online as of yet.

Is there a way to add additional fields onto a struct containing the decodable protocol in

2条回答
  •  囚心锁ツ
    2021-01-11 12:23

    To exclude urlImage you must manually conform to Decodable instead of letting its requirements be synthesized:

    struct Example1 : Decodable { //(types should be capitalized)
        var name: String?
        var url: URL? //try the `URL` type! it's codable and much better than `String` for storing URLs
        var urlImage: UIImage? //not decoded
    
        private enum CodingKeys: String, CodingKey { case name, url } //this is usually synthesized, but we have to define it ourselves to exclude `urlImage`
    }
    

    Before Swift 4.1 this only works if you add = nil to urlImage, even though the default value of nil is usually assumed for optional properties.

    If you want to provide a value for urlImage at initialization, rather than using = nil, you can also manually define the initializer:

        init(from decoder: Decoder) throws {
            let container = try decoder.container(keyedBy: CodingKeys.self)
            name = try container.decode(String.self, forKey: .name)
            url = try container.decode(URL.self, forKey: .url)
            urlImage = //whatever you want!
        }
    

提交回复
热议问题