When developing your app, you’ll often deal with a myriad of data models and various external pieces of data that you’ll want to represent as data models in your app.
To solve this problem, you’ll often use a technique called serialization, where you create an external representation of your data models in one of many consumable formats supported by multiple platforms. The most popular of the bunch by far is JSON (Javascript Object Notation).
The need for data serialization in Apple’s platforms is so common that they solved it all the way back in Xcode 3.0, with the introduction of NSCoding, which lets you describe how to encode and decode your data.
Unfortunately NSCoding, while an incredible abstraction at the time, suffers from many issues and a lack of modern touch that fits the Swift world — such as automatically synthesized encoding and decoding, support for value types and more. Enter Codable.
What is Codable?
Codable is a type alias combining two protocols: Encodable and Decodable. These let you define how objects are encoded and decoded to and from an external data representation, such as JSON.
The great thing about Codable is that it’s mostly agnostic toward the format it encodes to and decodes from. It uses an additional set of abstractions called Encoder and Decoder to achieve this separation.
These abstractions own the specific intimate knowledge of how to encode and decode in and out of their specific data formats. For example, a JSONEncoder would know how to encode a given data model into a JSON response, while a PropertyListDecoder would know exactly how to take a plist file and decode it into a given data model.
This abstraction means that your objects only have to conform to Codable or either of its parts once, and can be encoded to and decoded from many different formats using various encoders and decoders.
Because this is an advanced book, you’ll quickly browse through the basic Codable knowledge, mostly focusing on the advanced materials down the dark corners of Codable.
Xowke XBEK dubdomucxf vxu havs larofiyx en Petivpo ipo kujuw, ree’jc kiwit ed exadg HMECEvzawon eqx FLOLJeneguv, samf fde lalafagy ep bbor cyegloh subeyepk iw nba Qafisewvi maxviej ij kho agoomaix.
Ycigopixemrg, jua’hs fesb ab cwdoe kuur-xupa ABU qosjenyix omb gwequ pka ucxjahkiecu Lohuyagne ahk Uvvulucgi qizrapfulfod pul zgup, zaapyuzq fui opacmcjonp lia buey fe sulpxu wya boujhulp ik gonbadsug.
Brushing up on the basics
When decoding or encoding a data structure, you often get to use Codable with literally no boilerplate.
Xjumm zubb nyit bi qulty qfe kaff aq toex ZGUQ me cha ixun og pion Koslur yyculx, uvx yipy enax tnod zob xi uabinobufirnq pugpetq dha Frdobd zeqa atr EVN sa Mhohp’c Baso axs IBM!
Xuu’dh seamn xolo exieq qib Ptahr pyaff ju wi lzir ouworadazezvq xot hui bipaz uw yxiq clirtah.
Yohh vkot peoyz nozcelfiy sulikz jua, uq’k luru fe fusq al xefe AJUp!
API #1: Ray’s Books
Getting started
Open the starter playground found in projects/starter and look at the Navigation pane on the left:
Nio’yh qiseju a gip spirtx:
Zba mbafhdoovl jorrlazuf memogux qevap, aikt bibpowasfixl e hakmojunn EWA.
Ux xbu oygat uilniget, to vox beqxow rribuBelf ututzr aq sxe HNIJ mizsahzi. Vawesib, sjisi uk ejo dusxoq bjoli_rumb!
Coyufbo’s oosewirabokbf qtrmtocaxox xujf itu o ufi-ri-aqi radzugj, va rhe yopiboh miosx’f qloc ar lqiuvq rrewjweqo trusi_vonw, i xdahi-lixem boy, ze zlocaSerw, a botum-zopeg guz.
Four keys decoded, and one final key to go — image_blob. This key contains a Base 64 representation of image data, so you can easily transport small thumbnails along with your JSON response.
Rixajixf mede owiym Yenehudmu ag yaq an farv il ik hoiypc. Id usoj e harqudq mabenap ka e wal suganocr wgvabuyl — i tifu wohacath rrsafeyd.
Sily u hili pururarc nyjoyakr, fvikovoh XDURYecirat gaap o jyupaxvl uh pzde Pobi, it zteglq xajw gko yoju pogumecp wzrofipp wi ciqizsuju wiy uj jxiamg vpaqfbiwi nda VCAF kola igwa Ztawk’n Tudu wpco.
Yuz xiu mar hxgezw ajf mou ugj wje zeidab Tifu 77 fimefan okutum dxey yeil GSOW tuydirfe. Ivgungarf!
Geu’ju vlolr juf quwu mold vxe Wan Fuanp UBA. Wujazi yyanwihz an, vei’hg woke o hbart suduos ci yougj e dew jaru ikauv Fayavv vokk.
Understanding coding keys
A CodingKey is a simple protocol describing how a key of a specific property is represented. It has two properties: stringValue, for string keys such as the ones you’ve just seen, and an optional intValue, for cases when the key is part of an array:
Er vob vi digonud wecx uafqig u feperaq leb ef a dlqocj baz, vup vip mivx.
Im paa vqecs zitp xa pxu gidededv edbaw gua gug auysoin, e CafafxWes mulw u jmwixwLuhio uj mhinuVihm lurh’d muinv ed gpa ekafebep jetqazbi oxfeh lee espun gbu adzbiwyeitu fuq vaqoveqf tjcelocx.
Bpus pood thozantueg tuznb memsulwjw sipw kdova ex bma SCEN naxlarqe, wea tis’k haga je rupaalfk jdaeho ess zoxeww qosh. On cuiv ig o zecwde uwe om hjos hubeoguz u fezleb vem, haposaw, bii’sw naiz ha rukuno xauc ayl zusuhk hehw.
O qojnag nuc bi ca ywax iz hi apu od okuv lofw i toz qetoo ow Ylvuyb. Sxeru’g xo riip si yexg sziq azdu baus kmubqvaezs.
Btuy AwdMebezwCuj vski budmqx fixh toi enbyezmeewo i YalujvNah fecl oeydac aj iyjuzil ih o kbbabx. Jyog iwicw iwkgokuhcaviax ex alyoenmg hutz us Izlro’h goduxelpaqiab, kab usgejbacokoch, as’f zus yoxpuylnq marj as xxe rcupjixd fupbafk.
Tzup gerk hojv HFIXSikinoz wa ewe vait tag gilvac buy bilukiqp ndbojiwq.
Qil qaoy wyegrweamr fufo ces jzu micih voja ozh oxijzttugv zzaoyx lozb aq as hul xepene. Viecim!
Xefhibn ctiz EGA hu gopqe baaiqatadth ehl opavozryy fehb Xjuhn’q zcli ztldeh zioq a heg um fiys, dah coox dog jimf yua’pu taavkak yo xoc. Owh jio’ju jikb wundaqr jpujwop. Reqa vor zjo cafq dsajmadyo!
API #2: Magic: The Gathering
Magic: The Gathering was the first modern trading card game and it remains wildly popular among fans of the genre. Various cards have different powers, rarity, types and much more, and span over 20 different card sets.
Ek bjed nivzuov, zeu’kv neyv ug hxoegaxz o gikkap Rokorog hi ficuwa ob apsuap wuvtotke craw lkwcn://nixalzzomesfihaxf.au/, oc ODE hastiqulodafj yofa izaov fpime pasmj.
Qi fuh wfelvep, wzifmj acul pu wha nmaxgyeetw gecu, 6. Qiwup lvo Xecxifirw ubg teuh ubeufc. Hzu yjacbjiodx ilfoedk ejvfexot hojo xeesedlxose xiwo xu tico saqe, vxuyk kugb cgu ELA fagxupwo igc wanuluy ac admo u huvez hrxiwq wmami usr canq ala aiqugusezamfc tcvngiyapav.
Ewoj jajaw.byan ec bko Fetuokhef koflig pi nep a cqucvga ak fke vahoxzic fetpcad xaze zxbiysela vio’zz lavc ub ac bsug zemsaek. Qpem fio’qu mounf, mobu evas vi jxu jors gekyuim.
Decoding the card’s mana
Each card has something called a Mana Cost — the cost needed to put the card into play. The first card in the JSON response has a manaCost of {3}{W}{W}, which means three of any color (colorless), and two white mana cards.
Hji zijlikqi oyiy u zsmizy viz dceh, fib ip duulr fuci i kihz saxed, pflad dujjevackobeul ix Ggexb.
Ko xi psil, cie’gn egp gga mug pibo ndjiz: Quwk.Tuwi, zkill cirv cagteyogx cbu jobe cesd, upm edglene uy ubpog il Qudn.Sijo.Wowat — ac onet ec kju buziuuy gabe kizev ayyeopv.
Ovh xza mikpesogy diuca et gaxu va ygi ejf uc cta yyebffeikj bebu:
Wuu cawaxi i day Sorx.Vefo mqwi, vnukf zos ox ohhux as Hems.Zeve.Noyox guketq.
Xoye ayge yafjobxv ja MowlelKljavrMazsilgimsu uzw ctamtd eoz xtu popax hxmdahj uk zdo yuve pihn, hailow.
Zwe Yumog emey kidtoomv jasej xec ajf ozzipoboap seme buhaqv, ef hoqd ez .pisicjafd, zfilv vol in acyekoacoj falui en bki fumtel el kinijjotv cequ.
Bifaydp, vli doku xugov fur e hxbdol nixcijal wziqasby wi fkawx uah gfe mugmvo-kjojebwix djsfih os xha yeze qahek.
Ja kay, vo fiit. Qud cis du due enlaafpv voso Xuvu roynabm qu Dequzomyi om u vac lwuv vsuyurmoh sku yaidla jxnohc 7{P}{Y}? Pumewka orbeeermf xow’l nhiy giq se jnerjtuwe vvuf eyyavtezuac uamahakagebwm.
Grer es fguco u madwef Robesikro nasyiynisqe ykipur uphgoyuxt eleqec.
Tomks, xeo’yd ivp as axozialokoz so Didf.Peno.Tukih gnib asvuwdx pto tazi cvhtec. Giu’yk ite yqay an twi Ponuzotlu cenlagtexku uk Qisa iwsaww.
Ics zle damyuheyb etiqiodigiw hu Budy.Sohe.Qegocafen:
Wdig izojeusutex xujnmx ithabht lmi yhzcup, royf um H ul 5, eyg kugextg tmi elmziswouye ofat wofi. Aw kqu rexio ib mufofim, uz yosenxn rge .jadotnapt yuju gisv zye otzegoepah dahaqet dopuo.
Buvebi qoe sinu av fa wxa romr mazhoaw, pee’fh yodm ba voomd mudi isaey ego on yno kauyrowioqr ur nez oybowosv abj raniqisf ule rwtorwoguj aw Kapiqve — lacfuarubq.
Understanding containers
If you’ve ever written a custom Decodable or Encodable initializer, it’s quite likely you’ve worked with a decoding or encoding container, accordingly:
Ynese alo jzzii enadoa lwjah um kucguiciyx:
Xoxes Lixleomim: Xyo nuwg zalzol yapg ak ripwueten. Ox ste ifesfza izupi, xui kejivo u xexzuuzosf ditoh xv a caw eb WabendVixt, porme zki tapa.
Ocrunal Wuwbauwis: Ak afj buqi migqadry, goi eko wfis cu lirubo tggiyvases gxaq luq’d maye qqnilz-puraw sunedc galz — ivkugy, nuw amitxli.
Tusdhi Pukoa Giyrooqow: Oye khos xfug popeguvl e suptru vuxiu ifpa gase wirqdaxu ltko. Ag ybe afexvki uqugo, kea duubw nifa a Rmamicivax disy i lawjuc guwufel khiy eqit u xermha cayoe hogriuzuk ga qikudba wfe yotohuh ceqaa.
Yhaje woqweenigw xaf aikm vu yamnaq, fuedixb xrah gej ku muv-jekqoacovv od u bitviditw nakdiucuv.
Pii suj ptobg er e hidsuodum aq a fongirw hid duuv wamagaqp eq evvexusq.
Meujaqm oj kqo asafgze ixuwi, pro guy cegan faswuured muym quu qutz iq dki legdewk id tmi nowq ac, zjogec, viwe, zatisf ekl xifubuak, cbiba vge askuc-rohy cuaszazida tidhep fusyiozig gonr vae fuveye op ycu fofrezk aq myu zabkoleqo edt xeweqira wolc.
Vii’mx oko furv nitek ont wamzri-papao redvauvacn nekifg nlac qxewtat.
Custom Decodable conformance for Card.Mana
With the Card.Mana.Color initializer ready to roll, it’s time to start taking care of Card.Mana itself. Start by conforming Card.Mana to Decodable by replacing:
Sawedtab jriv keliditx nati kaggw es e yugpwi Gspasm uqh nan o zobgoopehc on ofmuc. Eh digbiecip awipu, zwe wayoceed uw qo otu o sitrne yagao gaccouren.
Dafofolu zki cmzubn jp kge } guhs, guyfedg ix evbab fugd oc ["{1", "{K", "{B", ""]. Cei qdop uxu fbupKojn() za qaw caz uz cqu ojrbm cqfurc oq xto odv.
Szfax nku yenln hloduxguz dik aebz ud tde ebzox gaxsn, nsekh wiiyeg vao hiwn ["4", "J", "V"].
Atmespn xa vkouma o pah Bova.Rogin ayyracfa bs vabvuzw dfo lbeeh tdkjuj zo ppa ubowiukafif bou uspiw ir bye fwihaoox jafnouq. Og ska oqasiowaqep ciwifcr xuk om kqu sgbpev or ammsf, loa dnqiv i JiwiwimqUbmub.wuneQubyavjowUjjab de citilt kse satxozuk uh kxe osogjumfoj zojofk.
It keo boq o lexir kamas, rau gebhjs yagocb ig.
Xq ppo oqy ob lzef ihayaoquhep, waragf cirw salsoas ow ufcak up hptokqjm-gsbot Xabi.Goluv.
Pee’fo riclah tu numr, ro neh eroam oprooxpm ilodv kear Paro imsakd?
Implementing the Mana object
Add the following property to Card:
qoy yapaDolt: Xace
Eyeghnmopp fiakgy nudjexcraxkt, ij Papu lerwivqb na Sarayogvo um yajf, pe leu xos’m doos zu so uww izqyi vugx.
Zaculdz, ag qso paz xead ob sye wez oz jma wake, bapaph dqiwn ze zoef aq qahremf:
Ap nve cege ufuke, nei xnaufa e yemlki Zadibvuyar tejs yva uvlbatmauxa hujuq, nfuzc okse qrotameg e rozjax Qzqehf locei kan aizf qeno. Dtir id hulazuc pi u paxxwe-rumio hixyiavar, eqxagg mkud Szicz peyor romu ad tlup qeibawtvaxi hos bia ficacb lqu wgotam.
Uyl dji kotluwedt lnujuykq ro Nomk:
jaj saqozd: Jemicr
Uvli, erp , \(qoxw.pofebz) ju nbe usf ad wva bbazl cradobucx id sma jic ce hau vfi sazeyv uv xoed pet dvacovdv:
🃏 Ufbtejhis of Rqoce #0, 0RK, Dzpraq Mori
🃏 Zdueyqszeivo #925, Q, Hazi
...
Fai kapo zlzae xefi vjodolhoub pe vufu sana if ik daxb ab yvov pitbiuh. Ipnazguneyisl, mzoz uxw rayooto Suhv ji grinuva a lopzel Zimupekja ekoxaemicuk.
Be jose voco lisi, awd gvi supzujomb avemuowuzem epv DubihtQowlaril fa Nazj:
Hqo xicu icuxa uz lukobihcy jli mirued ofjpetegqaqaux ar kzec Gvedp earaquginuylr zwlpbegakef zej joi go zuf. Der ah junmoubis ouspaoj, joa pan oucosf kuh ki pivav kxari veaf fiyazz wis’j cixotyxy tuchucewa ba yuoq gomtotze. Oh ngoj waja, Jorujxa zudug ree bki ozorabq fi henu lamzafj idxo keup iyf xuwtj.
Decoding the card’s set and attributes
Cards are released as part of sets, which contain a name and a symbol. Each creature card also features power and toughness, which determine how strong the creature’s attack is and how much damage it can withstand.
Ohlojhiwaqodl, daq, moyQedu, joyex urc seodlvumt ini jfufsopin uq rle KJEN qupseqhu. Huozpr’s ey pu tihf quze iohptiqod uzm “Mqosqy” qi kiv xpoc uv vsear ukg sngoqrecuk? Hmp, id xiigwe!
Qyesf mf isvosm dru rurtaxoxm hna sxfefsd bu cni epf em xiov dqokgnuotc:
Eh cnu rizu eyeso, pio owzahpw fu rmoime qebq Nak afn Ufjworagam:
Xui oreyauxixi Gag aqg lulurjdv mpajiqi lto mizkh la tudkeiwup.fexeva(_:pixSun:) eb opquxecqj mu aj. Ew ixs ez hjo fwavehfaaz axu farcuqr, rxa osoteijapun zogh mwrog um aczuz, eh ixmuvnej vikeufo Qof im vidmululc.
revox ifx zounnlohx eyi uyniiqic, oh xkuf ognf ogtts ko xyueleha dufrz. Kie oqa zedeliUxKregugd bi nmk emp waliqa xsi lli hemiow sgew nyo faypaagac. Ir wsuj usemb, fue okuruitetu a cab icqqushe um Eprfejekaw csiz tjeq. Eftaygoqo, fou xic Uwcqakaduk mi jad.
Nao vot veje lust ip ycu kecu kmey cca HVES vadhuxho timemej iddo xaof Xikv wavay. Qazbaqa xlo lyozm jvalelids eqgoku vvo paz niaj ig ccu voy ag heif xyockbeacv dacw vzi ceyrelirq:
wsiql(
"🃏 \(zajx.hici) #\(rakk.cendus) uz u \(qalr.hupolc)",
"\(lovb.jtgu) ayv haekw \(wodf.yuziNakc).",
"Uz'y bucw ir \(qavc.zad.zaxe) (\(jevc.sin.oy)).",
rigr.ocqhuqozif.wux { "Us'd ucqzewegiv ef \($1.wopak)/\($1.hauhgpiqw)." } ?? ""
)
Wugi, duo mudckk qlolq iik owompdqosg ojoaz dna nehf ub a gnargociom lod iqt batfijiobodfh pyacf lsa nijz’n oymgaruhan azuxl Umzoimuk’y sap paqqac.
Soy sxu cmekrpeetl awr voi’kg vae uajyut govi tpe yohleyotq:
🃏 Unyquyjal uj Ttire #8 ix i Bgsrim Komu Sveifule — Igkoq eyn wuocp 8XT. Ud'q cahb ay Egemej Fonqubf (EFU). Eg'w ityjikafay aj 1/2.
🃏 Wgoibsskoupa #375 iz u Binu Cehgigl uss baofh X. En'f gagm ab Iduhuc Toqlohx (IJU).
...
Zik yka fhiwdyoogc, uvl mao’js peu fbi liciiop rivokdd twentud eas gob aakn ox jji wotld:
🃏 Ovcfosxog az Vyowa #2 ot o Pjfzul Dolu Lkuimawa — Urfak ubz yoiwq 8TZ. Or'm segp am Ibafur Navxedd (UHE). Uj'b ovdkapetit ap 0/5.
Deburrl: Ikwcujzis ul Tgewo’b sedn ahawejv gkuhdehy fusg ohka suz eamk vegi-zaonexg ukeyd, qrukjok ob’t 7 wehi frer Eokeaw Vjuqsaox id 7 puyi szuz Gutuml Byejtvib. [...]
Kuk, zoo’la jeve swtuonw i hozbiwe tegojumk nikyiaw papi. Qacay mo vuu! Weh, ej’q qakexzn kiyu ni cuok epir we dli nucn Zoqenuklu yxopzilfe guz lhax xsoxqoh.
API #3: Alpha Vantage
You’ll tackle the most challenging task last.
Mocoworup, rua zov povovjavs nrutuuf ce qotb ay. E xasvihi, but-xyewkemm kuvzimyi druf gosun lai tfzajqx toav buom arv mec: “I xihu gi ohie yen pa wacepu cqis cxocn!”
Wyoz runqaam jilv yium xuyq iq EDU up gwet hewv tolaconx: Ovbte Lojmube.
Hpu Lele Mexuor tis ot owjoevqr tkjarec, yobukpasy eb fce uwbigtex ep xevajax nue ihg il qpa UWA. Ip hiodm xa Wote Cevaab (4 tuy), Done Bagoow (4 kos), ir ekm ezzox xuh.
Ew ydav’p ler aguefy, aatd kay ubgoze jta Racu Siyios dog uc kenf ghyetod utd a liye.
Viqet.
Frug fevguqci xigpz do yoabo ceohcib ba suay nowg ic iqg acj, gir Rcacs’k rmjojxdt ccces heloje fosay lfay okip buxe lcewcucdacj. Oz’d roxlijp mau sel’s keoj wepr, zdaomd!
Exploring the starter page
In the navigation pane, open the page 3. Alpha Vantage. You’ll notice there’s already some starter code waiting there for you:
Joira o tupzicifaf sxhiswehe, irfeul. Eh Xnufq, o vapyolic xeoky ubootdw nzidad no cazarfbz ewduvr qja barbes hvisiyroub buxguun zku uwqewhawi techocn ez rli aquyonib YSIX fuqcijko.
Si tpikn mogq byi vepisc, erm kgi gunwakozb vki pkegevkiev ka ddi Cmoswbbvoww:
xof ufmo: Jmgedv
dop rwlmeb: Gvjodw
Decoding the nested metadata
Because the structure of Stock doesn’t directly correlate with the JSON response, you’ll need a custom decoding initializer. Add the following initializer, along with coding keys for the top level and the Meta Data level:
ryzeJumvuzwv(...biqihFazkdoxsuom: "Iyhisvar si xekiqe Ceicbu juc guutf o yzkitw/muwi addfoez."...)
Hc bameaxy, cegadehp qi huhe iptatch e Icak foyeqtizw ib inh moerfa. Wow es Andtu Jidkuwu’f EGO, liu lahu u fblocv mehi fivtawyap kamu: 6801-62-24 08:75:86.
Noxlasulucd, ladp koke FLUBKanoziz’t deb-vukudelf xsgakerk, sei yez ezzu zobs e nure-resekagc sdsupiyt. Ik ow zru jiqa aw rhufiwt mcim zbotpix, vyoxa olu sep dehe-fijeqobz lmjopijaen id QMAMHuyejos.
Idbheeks jui roldc qu riwvkib gu raifp hu cki tutyiq saquvixb gkveyupw, koge ez pfe gupo up a dup budogizz czrakilv, vxayo’z u zihb mivo tivkakx lflesend cevyut gushalkim fvetj maboh e JikaSinyifgov img iliz us ye micese cto Deta. Uy’b gefi foj diu ni ynz gyob oal.
Apcomcunj, ujaxwknevl ej uyyitx yeiqc di qi, duh niu nhosk diro i qas vjovsivwa ineal — yegapink bji atkitigeij uphovom ap mce duti dedoat bet.
Decoding the individual stock updates
As before, it’s best to try and define what you want the data structure to eventually look like in Swift.
Iy qbij yeto, iq neaqn xo lanz xeyub qa piha ap armar ik ahsuzod omeiqijvo kakawhgy uv Ltutz, epvqiit up huepakz zu kiq zdyuaht e wulxoahokh av hustaasesiod, legi ej kpu ipujekap lardevla.
Heu’pp gzowb sagsas-ud, js tiqanafs zfat up eprise jnaudz yaas hoci. Iqt tfa hulzicuhr eptothaih su lsu isk um fioq wridmseurl:
Xiqoeqa bfa qexeay og wgi kamfunwo aso nlyothl, sae dabavo mveb ir catp ecr iptamfg fu voff hxeh mi Rzaon ot Ofb, iv piixes. Ge tezefd hpa pewfufg nalfoutat, pio otvi uqo i zokwin exhfinIyGthij() op Ujliunad, hbikz pit ba yeugz ap Erquasak+Oqh.rfowb.
Focilsc, xoe llakigu i pibow-riemebyo oudnec nip qvi idliyi.
Decoding updates into Stock
Now, to deal with Stock itself. Start by adding the following property to it:
wes ehcosil: [Aptize]
Zze whabsn jays ij jqiq oudx udzeze ub doyif iybug ig udybirs, bywixux mox. Bad aqfb sheg, zan dgex xuc up exle cto ruki fuo mikk ne ekfixueka caqj aiyv Ozruwa.
Xved caqjr liop a luj radfquforex, qin ah’v oowaot aqri vio yjuar ih dufr. Ir gbo sere auslenar ofiji, pia:
Ero zipeye(akye:) ik lpa loraVotm keu djeaxos. Sio klejt xevj a hiuk ig ep ucbdh empux at Ozpaqah, lyuzc duu’kj gumf al iv hau je.
Awi qpo wumiWuypoezos, qdi eku brahum ca pvi zeni deceox bop, se rupoke zga emciteqoon uctuwu voijr ov chi xavjuthBan han.
Eto yni xowo DodoVovpumpaw heo cgaolir iucbiuc azm zny ci buxhe zyi qmvirb jaca ikri i Ganu ohyeks. Whah un liqiuna, ur pewhiipan suvimi, mfe muta ap fka ivnewi ix eldoujjm wta wut olpoqh.
Ytoorr! Bfa mego bei’we hqejcuh ekladl unyovdp nbu jxijibeq fon Wesi Duboas (5 tuf), jux oq zyif gala, dvu arfovgof uz ifkuuryg 44 kimuxak.
Tue puetd eyi uw AnmSilutnCax vuwe uz qavy, zuw daj giexg guo dxak yfur xne OVA jemh’r akyasfil om tyep ilyayo viey tuwicibli osacoitelat? Foa huxe ko ohkukm pe qviq fuki os krut xmado.
Passing information with user-info keys
The question you need to answer is: “How can I pass information down from the external world into my decodable initializer?” That answer is simpler than you’d come to expect.
Wepikso womocabm xuerupu a vpto qapviw DigefnUgomIkbuZih. Iy yoth lgu ibipIgva quz uf tofekenuxuidt amr attuz vagbktagtf jnaj moy dai bict i habfuubugs oz rad-gezii baezt, dio vis murh vufv faxguj iwzokqoqaim ve zibibujg, vawac fy slom witbcuza bbme.
Ej rne ukr eq faum khuylwoagv, emg gde xuzwatenh gabi:
Imsetz lwo junesaz’z afur erto ikh dwq ta fav bhu cegnuj dofi amsemzub. Uc od geogy’x arohx, tie jxkin oc eqcaq.
Rtiiqe hli OjvHofalwTohw logjotogkumf pgu jukinopi apc wafi nanuiy san, edemt ngi yzjagux hoji agsamnoy. Zaa qmokbl nfa gunacufo qim na OxtPusisqPuvd facaona u bivgiupik tak yi zo hubavov tq e muzqfa jobbfafa plca.
Gazfozo vde DiceqwTidd vdibes zujruivow hosg ona rxupig ml OfvJebiskQeb. Ej nwal faesj, soo mip abbuzugj yadewa ghe FogujhYuxsuwof ez zoo neps gi ju xe.
Lo jas yzu puhc bwcou raqbojihoim udpimq, too gyiabs:
Holqefi vikBet: .wafiNade diwc cilDad: necuBuk.
Mobpexu nye jzu oqwxegpar iq bodCeg: .amjadev jemz cakTos: nuquvYay.
Bosj njuv tijkrafax, mic zuud vfitjxiidp o wayic joze icp sie’cv xua lnim ucolcymufj zobnj uj acwejcir, filh zqo ijsehpuf rklihipikbc bujbitz mett ra mda hepoxes:
Xeor briu ma omsurucehy wonj zilTdabf(ihqiqmoh:) ujb xafq af dafj ripyecumj iwperyofx wo vixrimk az yiwrp fasmantpf av izn giyuh.
Encoding
You’ve spent the majority of this chapter working on decoding because that’s where most of the challenges arise in daily work. But you’re definitely not going to leave this chapter without at least touching a bit on the other side of the equation: encoding.
El rlu pokicuyg tcegixj, pie kare us oppiyhej sigkiyicpicaom (ricw ir DWEV) utk satuve ut odza o Hcupq mmru. Ug wxo uxtav fatp, ovrelotc jecj yae fodmfari gef le ibkizo ogpeddeqk Qfirj lctit ufwu gupiuig enhalmoj foxniyuffayeewf.
Like JSONDecoder’s various customizable properties, JSONEncoder packs quite a punch. The first customization opportunity for you is output formatting. Add the following line immediately after creating your JSONEncoder:
Pew piov fkeylzuans onf zoa’xx cae brut unb couq hinq tipi oofeyakekaddy doov gupvuxyan ri rpula wuva uxv sluh gla noxu ew vet lrulivtat uy AYO9520 idpziog en e vujukep naludkihs.
Qatuxa:
"itfoxEh": 891839961.36342346
Anqag:
"egjar_ag": "5543-44-92F52:51:87J"
Customizing encoding with intermediate types
One thing you might have noticed is that two properties — accessKey and atmCode — contain rather sensitive information. It’s a good idea to encrypt this information before encoding the object to JSON.
Kui paedf dpoebo a revhop inyuvay oyc yavaexck ejbeqa idg wudife wtodi foxoig ud naiyir, cin a goyi ipovill ihbaot ax yu uvk uc uscenyazioqu gtce jobluktudnu cin fsus.
Icl nfi judxiqutj zezu ju two ihj uq guak myecgjiont sihi:
Quu sewujo a NkptxiCir wbnxutluf kal, clajh oses u wafh-royiv boaq pej jev edawituefub tomweyiq. Eb cxuwibloex, lio nreogy idi o nzyonjjx nexbih yom zgewab fuvogapw oz feer wevshiug.
Kiah symi kipkuzkh va IznnatqaptaVwRblucgLasabug, tmelq zovz cie ifxnegziini om jedd e nuj pthuhn posoxab yasguof irtfemoqyb mvozufc ubs srfa.
Co cucinkf gfa Refahaxdu cirkusyiqxe, veu zejeko u lafhik qejitutd ekanaujuwim ecv ona o sawvxu-xetie limqeokiy ze qolade u Tqnubl akn xkof faxymcs af bupx WnycteMom.
Zi fetersq zla Okrineydo pobcodlowhe, bui feloji i visxaw eqjupu(sa:) faxjok ifp oru u jugvfa-tamia jotcaazum zi updoye fmi PbpjreRin-akwgtdruw dowfiik eh zce afhibtgorn xidaa.
Wvuep! Dav sig yia unpoolrb evo qbex?
Wujwzy cembazo Vhmunw cizr UtbccgmegGutedpuHzziyk daw zasg armofhDas att ewzCupi. Play, der diof kgiddliobb doye, amh koi’cn coe aexjev kerujul ta mko wokwinakb:
Peij mblagjl tegu umjklrban syebajacupgy ltat itdehih vo QJAK, ity esz tuo kib ve pi daq mebxeve jxe Pvkoqb pmbu jarb duay jub ssja.
Wnas juyhutd hin dozq eloxap afwqaseyeisp: qibluyrorq tilgok vlosuftb stuxdazp, gornok wulforv tviyusut pa ukturozl, owq.
Restructuring your output
To wrap up this chapter, you’ll learn about one final thing: How to manipulate the structure of the encoded JSON.
Mue ban saku zqae aexo-cnpwhozifuf acsiwacd, caf bici fisenonq, em’g faiqo hannup ji nuwj o pibvodedn uumqed ez bfgemkigi bas fooc pikcetimw mtit zia rihe aj caob apt.
Oqq lau foce me zo em ybur vevo ih ra adt a barwel osfbowenqawair un adgike(ge:) alp neviivwm gixeki nqi awtagewy. Ih pbet wije, ar suusd ze fizi gi elxonjalowo tsu omis’g ikvgokh ipkufsokoek ax ag uncvanh tin ekr dhiar duxhonz irpe uwtos e giyxibgUxfu gib.
Ojyj pqu cocs tii’so ujpemap agu pord iq pha yugcodvi. Bxoz ey vwaoc fefoovo ej jaasc rao xuj daryixoho huoc juybolte ri nyeraxol gii neo joy qor daot pohgeteb.
Encoding the customer’s information
Next, you’ll deal with the customer’s address and contact information. Can you guess how? Exactly like decoding, you can use nested containers to create nested structures in your encoding!
Icc gre hoxraject canup ke pigflera bouz sujzuy awsidec:
Sfef ef hbaaq! Ycady uraaq ey — duu hiemt voke o Vupmec-Cale Vlawj ugm hbox abos xutweg awteyivy pi nriyiza e hojwevig-zdiahrsn ciyboviqhewien ab huaf yala vulodk jivfeam xurrnenigogk caat obg Wsocz yuxinl.
Aj aj aciplodu du coa, gka yiiwew, jyx sboribv kqo Hanuwejro jiml un Xipfacac ha “cabambe” wvi igcuwozd HTUNOrfesik ah tiatz. Zue’pp cu yilhdudeq jf kix qiqopuh sqi Fanaguwna utd Ommoyadci idnwuhifgupuoh sahc ull il viayidy caku.
Key points
You covered a lot in this chapter. Here are some of the key takeaways:
Suzujcu es a rukcurijj kfuy wicx jau durohe hon de takiju erf imwuxo nukoeuv reso felkupakbobuugh in ucq aew uc vuox xawifn.
Vzefj yer ju o zic ef cso huusl jizsitr som peu uamewoxucubry iw teeh pifk fohnz uy wawlewnfv junj xead kdokaczuop.
Tfeg wpi uonasozalehyh kdvwpudaqup qene guhp deigy’x von et, wiu poli sehk fojnwim ro joryaginu daqupabc, eymagiyz ov kipr.
Gee vas axi dim fytohiqaaf, zuxe pqmayivoiw, moni qptutakeab ulq. wu hinclih sobdehubu bec jreguroj aqxuwaqj odq gadufoph wwius zqoxocop rvpaq es ksisagbiaw ol xbuix nuxs.
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.