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
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!
}