JSON karai: Padengiamas „Unbox“

Julian Howard nuotrauka „Unsplash“

Iš pradžių paskelbta „Swift Post“.

Covable visus sujaudino, nes visi mėgstame analizuoti JSON ir malonu, kad šis įrankis yra standartinės bibliotekos dalis. Dabar laikas patikrinti, ar jis yra pakankamai vertas, kad būtų mūsų mėgstamiausias.

Pažiūrėkime, kaip „Covable“ veikia šiurkščiomis sąlygomis. Mes analizuosime šį JSON naudodami „Covable“ ir palyginsime jį su populiaria „Unbox“ / „Wrap“ įgyvendinimu.

{
  „PlaceName“: „Stambulas, Turkija“,
  „Lat“: 41.0049823,
  „Lon“: 28.7319958,
  „DataAdded“: „2018-05-25“,
  „Info“: „Stambulas yra labai istorinis miestas“.
}

Mes norime, kad mūsų duomenų modelis atrodytų taip.

struct Vieta: Covable {
  tegul vardas: Styga
  tegul koordinuoja: Koordinuoti
  let dateAdded: Data
  tegul informacija: Styga?
}
struct Coordinate {
  tegul platuma: dešimtainis
  tegul ilguma: dešimtainis
}

Iššūkiai:

  • placeName ir vardas nesutampa. Turime patobulinti kodavimo klavišus.
  • Du atskiri klavišai lat ir lon tampa koordinatiniu objektu. Reikalingas individualus dekodavimas.
  • Laukelyje „DateAdded“ turime naudoti „MMMM-mm-dd“ formos formatą.
  • Turime ištrinti klaidą, jei trūksta vardo, koordinačių ir datosPapildytų laukų, tačiau informacijos laukas yra neprivalomas.

Įdiegimas naudojant Covered

Įdiegimas naudojant „Unbox & Wrap“

Naudojimas

Jų panaudojimas beveik vienodas. Tai, be abejo, jei dekoderį ir kodavimo įrenginį apibrėžtume kaip klasės savybę.

Koduojamas:

leiskite vieta = išbandykite vietą.decoder.decode (vieta. sau, iš: jsonData)
let placeData = išbandykite Place.encoder.encode (vieta)

„Unbox“ / „Wrap“:

leisti vietą = išbandyti vietą („unboxer“: „Unboxer“ (duomenys: jsonData))
let placeData = pabandykite apvynioti (vieta) kaip duomenis

Palyginimas

  • Neįmanoma įgyvendinti 47 eilutes, o šiame pavyzdyje „Unbox“ yra 39 eilutės.
  • Raktiniai žodžiai „Covable“ visada yra griežtai spausdinami („CodingKeys“), o „Unbox“ priima tik stygų klavišus.
  • Dekoduojant savybes, „Unbox“ nustato tipą, tačiau „Covable“ reikalauja, kad tipas būtų kaip parametras. Tačiau tai galima įjungti ir „Covable“ sistemoje, naudojant paprastą plėtinį, pvz., „KeyedDecodingContainer + TypeInference“.
// Koduojamas:
pabandykite container.decode („String.self“, „forKey: .name“)
// Unbox:
vardas = išbandykite „unboxer.unbox“ (raktas: „placeName“)
  • Koduojamas palaiko tik vieną datos kodavimo / dekodavimo strategiją. Taigi, jei turėtume UNIX laiko žymos ypatybę kartu su dateAdded, mes ją turėtume rankiniu būdu paversti datos objektu inicialu (iš dekoderio :) metodu.
  • „Covable“ turi daugybę pažangių funkcijų aplink klavišus, kurių nėra „Unbox / Wrap“. (Žr. „JSON naudojimas su tinkintais tipais“)
  • „Unbox / Wrap“ yra trečiųjų šalių priklausomybė, o „Covable“ - standartinės bibliotekos dalis.

Apatinė eilutė 🎖

Nors prieš pradedant naudoti „Codable“ reikia atlikti tam tikrus tyrimus ir suvirškinti, naudodamiesi „Unbox“ galite pasiekti keletą minučių. Jei norite atlikti nuoseklųjį ryšį, „Unbox“ reikalaujama tik įdiegti init metodą, kuris apibūdina visus atvaizdus.

Kita vertus, Covable yra juodoji magija.

Daugeliu atvejų jis tiesiog veikia be jokių pritaikymų. Nors patobulintas naudojimas kartais gali būti sudėtingas dėl to, kad raktai yra sunkiai rašomi, to lengva išmokti. Koduojamas yra tarsi Šveicarijos armijos peilis, todėl negalvoju apie jokį atvejį, kurio negalite su juo sutvarkyti.

Pradėjau šį įrašą galvodamas, kad „Unbox“ yra daug paprastesnė ir lengviau skaitoma, palyginti su išplėstiniam naudojimui skirtu „Covable“, tačiau pavyzdžio kodas nurodo kitaip. Galbūt laikas atsitraukti nuo visų trečiųjų šalių JSON analizės sistemų ir susitaikyti su „Covable“.

Gerai žaidė, „Apple“.

Ačiū už skaitymą! Praneškite man, ką galvojate, ir padėkite skleisti žodį.

Tolesnis skaitymas: „Swift 4's Covable“ pateikė Alp Avanoğlu