/ / prečo metóda dekódovania v swift4 dáva objektu nula, ak je v json jedna značka, užitočné zaťaženie má nesúlad typu - ios, swift

prečo Decode metóda v swift4 dáva objekt nil, ak je jedna značka v json užitočné zaťaženie má typ nesúlad - ios, swift

Mám užitočné zaťaženie, ako je uvedené nižšie

{
"name": "Dog",
"type": 1
}

a trieda, ktorú chcem previesť z json na vlastný typ, je uvedená nižšie

class Animal: Codable {
var name: String?
var type: String?
}

Proces dekódovania:

let decoder = JSONDecoder()
var animal: Animal?

do {
animal = try decoder.decode(Animal.self, from: data)
} catch DecodingError.keyNotFound(let key, let context) {

} catch DecodingError.valueNotFound(let type, let context) {

} catch DecodingError.typeMismatch(let type, let context) {
print("mismatch")
}
catch {
print("some error (error.localizedDescription)")
}

print(animal?.name ?? "Decode did not happen!")

Objekt zvieraťa je nulový. Avšak podľa rozhovoru Apple WWDC (https://developer.apple.com/videos/play/wwdc2017/212/) mala priradiť hodnotu nil k vlastnosti typu. Pretože existuje nesúlad v „typových“ údajoch. (Očakávaný reťazec, ale Int bol nájdený)

Dokážete uhádnuť, aký je dôvod toho? Ak sa niektorý z typov údajov značky nezhoduje, potom sa celý objekt stáva nulovým, neznie mi to dobre.

odpovede:

1 pre odpoveď č. 1

Prečítajte si prosím chybovú správu pozorne, dôvod je veľmi jasný (nie je potrebné) hádať)

Očakávaný reťazec, ale Int bol nájdený

znamená (nájdená) hodnota je Int ale vyhlásil si a String vlastnosť

všetko reťazce v JSON sú zabalené do úvodzoviek, typ pre type je Int

class Animal: Codable {
var name: String?
var type: Int?
}

Ak súbor JSON obsahuje vždy obe hodnoty, deklarujte vlastnosti ako nepovinné odstránením otáznikov.

Implicitný dekodér / inicializátor zlyhá, ak akýkoľvek dôjde k chybe, môžete to vidieť len zo syntaxe kódu. Ak chcete mať jemnejšiu kontrolu, napíšte svoj vlastný vlastný inicializátor.