Swift 4 dodał nowy protokół Codeable
. Kiedy używam JSONDecoder
wydaje się wymagać wszystkich nie-opcjonalnych właściwości mojej klasy Codeable
, aby mieć klucze w JSON lub zgłasza błąd.Z JSONDecoder w Swift 4, czy brakujące klucze mogą używać wartości domyślnej, zamiast być właściwościami opcjonalnymi?
Dokonywanie każdej właściwości mojej klasy opcjonalnej wydaje się niepotrzebnym kłopotem, ponieważ to, czego naprawdę chcę, to użyć wartości w jsonie lub wartości domyślnej. (Nie chcę, aby nieruchomość była zerowa).
Czy jest jakiś sposób na zrobienie tego?
class MyCodable: Codable {
var name: String = "Default Appleseed"
}
func load(input: String) {
do {
if let data = input.data(using: .utf8) {
let result = try JSONDecoder().decode(MyCodable.self, from: data)
print("name: \(result.name)")
}
} catch {
print("error: \(error)")
// `Error message: "Key not found when expecting non-optional type
// String for coding key \"name\""`
}
}
let goodInput = "{\"name\": \"Jonny Appleseed\" }"
let badInput = "{}"
load(input: goodInput) // works, `name` is Jonny Applessed
load(input: badInput) // breaks, `name` required since property is non-optional
Jeden więcej zapytań co czy mogę zrobić, jeśli mam wiele kluczy w moim jsonie i chcę napisać ogólną metodę odwzorowania jsona na obiekt, zamiast podawania go zeru Domyślna wartość co najmniej. –