Why is the names Array not decoding?
Prepared for Playground, Simple paste this into your playground
import Foundation
struct Country : Decodable {
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).