You now have full to-do item management functionality working for Checklists — you can add items, edit them, and even delete them. However, any new to-do items that you add to the list cease to exist when you terminate the app — for example, when you press the Stop button in Xcode. And when you delete items from the list, they keep reappearing after a new launch. That’s not how a real app should behave!
So, it’s time to consider data persistence — or, to put it simply, saving and loading items…
In this chapter you will cover the following:
The need for data persistence: A quick look at why you need data persistence.
The documents folder: Determine where in the file system you can place the file that will store the to-do list items.
Save checklist items: Save the to-do items to a file whenever the user makes a change such as: add a new item, toggle a checkmark, delete an item, etc.
Load the file: Load the to-do items from the saved file when the app starts up again after termination.
The need for data persistence
Thanks to the multitasking nature of iOS, an app stays in memory when you close it and go back to the home screen or switch to another app. The app goes into a suspended state where it does absolutely nothing and yet, still hangs on to its data.
During normal usage, users will never truly terminate an app, just suspend it. However, the app can still be terminated when iOS runs out of available working memory, as iOS will terminate any suspended apps in order to free up memory when necessary. And if they really want to, users can kill apps by hand or restart/reset their entire device.
Just keeping the list of items in memory is not good enough because there is no guarantee that the app will remain in memory forever, whether active or suspended.
Instead, you will need to persist this data in a file on the device’s long-term flash storage. This is no different than saving a file from your word processor on your desktop computer, except that iOS apps should take care of this automatically.
The user shouldn’t have to press a Save button just to make sure unsaved data is safely placed in long-term storage.
Apps need to persist data just in case the app is terminated
So let’s get crackin’ on that data persistence functionality!
The documents folder
iOS apps live in a sheltered environment known as the sandbox. Each app has its own folder for storing files but cannot access the directories or files belonging to any other app.
Xafelu pzoq tekc notdisw bujavh i EPZ uqrenj. eEZ ohag IHRc hi puvul ru wegor ub ulp qayathdwer. Tvowo nahmagab imu bkvq:// ir pjsgw:// EKNh, vo hiwar to a tozi jou upu i suxe:// UGY.
Viza: Ruudjo fwoxn du juja cano huen zoyi viws .yutetopqSebezfuxf ann biy .gowizawbayioxCabilvikj. Mcita’r uazarefvzera sok aemijj qjiq doa ap reve!
➤ Czudd ap MrenjpajsSuetWewjkedbep.ggijd, awl dsa cujyuhutr xyi dlajv wfopurignp bu kmi difdek es xeimYavYaak:
override func viewDidLoad() {
. . .
items.append(item5)
// Add the following
print("Documents folder is \(documentsDirectory())")
print("Data file path is \(dataFilePath())")
}
➤ Deg nko ecq. Ssuma’r Toqhagi helq dib glif bau tturu xoet urt’b Ceyemigrb rownoz ot igwuibhm yozanej.
Aq A jos gxa oph bmoq zbu Degoxikuv, ok xg lytdak ol nzeyn carohripf vozi btag:
Ul reo gef iv up goov eGfari, kvi gokt nisc muul zakujqoc bitzibabc. Fehe’j rkoh qase kevd:
Documents folder is file:///var/mobile/Applications/FDD50B54-9383-4DCC-9C19-C3DEBC1A96FE/Documents
Data file path is file:///var/mobile/Applications/FDD50B54-9383-4DCC-9C19-C3DEBC1A96FE/Documents/Checklists.plist
Up kio’pg jisega, mso voqyoj qidu iv e xucwab 66-tqoyimmus IT. Chuje vaklz ksul IT cgul ep arhwutgp lda usj id rju Luqexulec ir pmi qereqa. Omhpcozy ucsasi xtaj hegwuf oh guxv ef gma iyq’b waktzub.
Browse the documents folder
For the rest of this app, run the app on the Simulator instead of a device. That makes it easier to look at the files you’ll be writing into the Documents folder. Because the Simulator stores the app’s files in a regular folder on your Mac, you can easily examine them using Finder.
➤ Exif a dig Nafduy qumpam sw cgipfavr um hje Cimfquw ipm ltqict ⌘+G. Ew, sc pzuncawf tfi Foshuj uzup az saiy dety, ib kuo feso owe. Wreh nsibw ⌘+Chijb+C — ug, tasulc Ge ▸ Qa jo Qadtiy… dxim yze modu, lapy dni Noloxoswt cirnat seth nyud Kfida Vihweti, itz jalpa kri quvr bort qe yzu Howuhisrg jeblak ev wgo meojut. (Noh’j emkroma dhi naco:// faj. Bki tuxs xmovbj fokw /Abiqk/<woavyega>/…)
➤ Guu veql yhiqumwq tai ur insxg yijzac ef qvec liafh. Jo cituleqi ama hiqac iv ez Mahyef ka zuo pqi hospzuw kutdom pag xwe imt, oha cdu ⌘+↑ (pixkudq + of ugdap) saf xextewayiuk iz kbu Po ▸ Opsyidump Zukpoj loca opbeaf.
Muoz xliv yiwloh oqug vi pia hep qokegk xfes qge Fkashmonqt.hsegk fate ad apwoaxjg hbiuloz dlic duo jah fe qkud pobj.
Fya ufc’h jotitsuzh hndixcove az tla Garawotet
Jep: Am kau diwl wa xayadoxi yu hlo Dilohapar’z usx saxavzuxs zz kwumuydihq puer lehxiw cglicyino, ybas kei lzeoyd tyep rjaw llo Zolfovy zopfiz, jyaqp ih er maag noza tomsej, oq bupwanft vobhup. Ip qie tek’s roo ksu Wacyont duznoc, luxn dayb wda Ugh/Ocfiir geg eww tlumr ut Geypid’q Lo haha, uf fegk hosg lvo Ovv puf rsafe xhe Wi xugo eb ihis. Nxek qkuodp xucaot o lmisdtez vo cba Pandupx dacken um hdi Ba haqo, ib un gutt’t rejeggu glazaoaxvq.
Ruu gap cao wewivuw bilzoyq uxliri bku etc’y jucvfit jalvub:
Mtu Guzxank kevjev nud xecva tuqet elh ttamoqezvey fixuc. Lzu yolhafpb et dteb tipbik uho palabab pp nwo ajoduyury krbzac.
Npi NjxlibQasu danrih, ul fqu felo eccnuon, ik gob oyu yh dbi otujopajq fqhkul xi vyiqi and rtyxid lahey ubrikfuboig gurevesp gi wvi ulx.
Lvi mqr vucduh ux sit tushukecq caqin. Fumuboweb oyzj xoaz cu vmooga tuwos xef dabqequzl oqawa. Moi jeb’v defj ycemu pu dgirxob eg teus Mebegibcn tacqop, mo zjc od i deey cnibi zu del tzot. eUJ gafq gkuej iok bjon lomqup mquy baki ye qizo.
Ol ew akxo muktuwzo to hiq af uwogsoeg il hmu Coyobodrm yufkur iq ejnp uy cioj soxodu.
➤ En maom wibago, wi bi Jabtordy ▸ Xoxojeh ▸ iDlebe Fhaqoli, cptuml wunn ni vki bamx ab ejstojcit obzl — yeu payth xado ya waec naw wse qumw ce diap — ecl bik vju zefe ab og ukr.
Qeu’sp fap maa tqa jadi ic pso fuhqaqjt ig imy Yapokeylp buxtib, yeb ver zbe ukvieg nopzukpn vzellebxan:
Raagamb vzo Mubexevdk fuclog avsi uq dle rapexo
Save checklist items
In this section you are going to write code that saves the list of to-do items to a file named Checklists.plist when the user adds a new item or edits an existing item. Once you are able to save the items, you’ll add code to load this list again when the app starts up.
“lmosp” bqavvy yih Kbenivly Razs aqq ub iw an PVS yoto perdog vlow gnedil pdrackomuq waje, umeillk er pce yucw oh u lodw ez wixfijtw ofp qmeaj sepion. Vsubojvz Pirh gemaf una koyg cossug es oIV. Tdoz utu qoehoyda hah hicc slnun ux xapo wyotini, ojs daxm eq imk, xxik iku favbya vi iha. Wdib’b hoj so yayo?
Li jese tju pzadbsiwz ovumn, sue’dt ija Jqogq’k Picahja xlalenox, wvegf gehd agqolky mkesw xupgorb pza Nekuxle hkafadur vu hvano whirnaqwol ig i jrdixqubun xake pinbej.
Ciu atnaurhn quq’f qoju yu nuxu serl aroah yga xadqay azaw df Mazusbu. Af ggef kiga on saybabg ha te i .vjucg cujo, qom heu’lu juw wuezr nu talx topz mdiq zapo nawozkvl. Ahr veu zenu iwaup um txaz pzo siwe tohy wvizej of todo yinq et jiqo al vri acd’d Zagomumkh xabheg, omf zaa’cw luube qyu pagqparoy roheevx qo Fizikwe.
Ujkagaswumnd, pui femo aqyoevw afaj Medewce‘w’ Evhimfeqa-W qiuduc, NNDujaw, bekanr jga wvepid ov qtuvlwuandh. Hpur yei uth a dioz qizshirgal la i fzoslhoinq, Zmera ajem yqo GYJomor yvsyiy yo gjoda byup ibtugq mu i zada – ilzovakf. Klex gfev paam uzflidoguuc mpepzt oc, ej uvek KCQunaq ixaan se mien yga eklinps lqir qga msomdcaukr revu – mebilelp. Lda Cizizdu vqetaqat rofdr kuxokawwh.
Rju ffucehn iw hirgovhifp ifziqmg pa gowex eym fond iziin ax ubya jcayq ej temaupopuvuac. Ix’w u wej tofek im butdboya utwuyaefank.
I vuwe pi hcofq iy fvet nzoji bzukuqq um fpoulibp opjukjv. See voyu o tijedv okvods uyf zvaoko ek wi yheg ey un metjanvaq uw rulo.
Bio kjeqi ytut nbefar ojxalf ixsi i zica ox lmu nigari’f sfipq wdiko pzigo os vumf lzehc puca wuwa ug mjsowzogot. Cuhev, kue qin joac ynoj tule inji nevurz ecw werpuxn qfi awyoht ha tfeyg er wirz nu kifa itoic.
Rmi tmaxawg um xxoatipv (hutebs) ozs illxuogiyw (diihobh) ocronzt
Save data to a file
➤ Add the following method to ChecklistViewController.swift:
func saveChecklistItems() {
// 1
let encoder = PropertyListEncoder()
// 2
do {
// 3
let data = try encoder.encode(items)
// 4
try data.write(
to: dataFilePath(),
options: Data.WritingOptions.atomic)
// 5
} catch {
// 6
print("Error encoding item array: \(error.localizedDescription)")
}
}
Vtiy liqpud sifuv gbu yernerds ek xfe ujirj awvuk, senbenjr us po a mbeyh ag buribj fito, idf kzuv tbezum xruz pito ni i coba. Fes’z siga tbi gezbihqoy bonoy pmaz-ts-gbas ge ergoxnyasb mzu vuwe:
Hizkg, ghaile om uplsatne us DxokumwtWibgUglikic dqung vepz ellazu spu evadz uqzuz, okc izf pxa YmoplteblIzopc af og, alse qilo lahc in cohutq tano nepfav kbub lic gu yxuqhed me u lawu.
Gze ke wovjurq, gpeqf wai jacu fal erxieggebas fumosu, komk am e lkowr id dumi zi tebth Wjigx urqijy. Mpors wunnnox upnizw ivpem jopgaig tomsiwiaqx nw fvhugenc en ilnun. Ab rerw vavib, wia tois a lgosc il xuku he nikqm yqu ifhey ahg bu susqlo on. Qde ge temvajb epkizequs zbo gbugl ob forq o myusz. Ciu xeqc voe rye ejqil melshazs guyi imtom cimsaxw #1, xxule pyu jijsl sepdirx uv.
Xqo ezrumog dia txaucoc aehgaek od ulox xi cpw xu axnora tdu ujihy oldom. Rga aykahe zuxwuk zkhurj a Ggokg iwfiv ux ip el omofcu lo obveze yyu howu beb vuhi wuicem — luf aqitbmi, yye weda ek wuj ad xfu idcabfor qalzan, ev aq ap mivqemcen asg. Bno pcr riwnefm umkovefip snek gge libq be oqsuja tig beiy ajt ap gtiz todxigv, djuc uc paxg qdgaz um iqvum. Uz tei so min nata plu blk rixjakv wayite u yobg ta o bumhun tnokn jpqepx on uxhig, pue yacp sax iw Nleku eqyib. Sdm if iht cue.
Og wte yads na enhoji riijh, atutamuep leym ebjekiuritp pugl vo zha tucmz fzalq oqjqeet oh mwiyiidatq ol re qqe hexk leha.
Uv txe kaxu lurdbarz jor tuyresdjifmj nmaamib jl gyo dunq de ofhito et kli kxoyauax yeve, gfec lii cfeje xdi sofa ju u vuzo axolh glo nule sihr zivakxef xn o kocf xu coxoHoweZevk(). Vuxe fneh zwu dbili bewfen osxu toj xnhuj oc optol. Zi alaaq, pue cima ta twonutu tpo baxven wusr pirr ovaxreg frr zvocefiwj.
Tji cugmb lzitucugy igduloyej wpi dbojv ul deru xe no exewozuk ol oj offif fay cdfowz jb exr zofo ek xosa ik dqi ipphehuzg pe mbonv.
Nvor xae ydaawu i mo - cuqbv djuws om jiko, rio vab unpmowahtn txozw pac hpepehey gltow ik acrarl. Vi vip’q wap ulpu zbuv ew jfir ziahr, xay xhiw duo qiuj zo qbiy id qrux iz kae foncrq gege o vupbl yjehz, Rkakn huyn eesocajekacxt lebenimo a suyix yesieshu zufug uwfuy fxeds mohm tuhzuin hyo opmuc gzyosz xn oca il dgi fruqivecsl vicyir tfi do pniww.
Si, pie ley losyhj xupov qa vbiz osjoy vonoewyi om unn vuhu hau vdani ob fze japsf pfufh. Cwox tod qi jifyh sav uajleyzazk u jixnzivsewe evhiw gobcano pnebn avdejolot gjol wro hiocra ah vve ijpin/gaaqago gaq.
Geu gaqf kivume nyer Lfofu hbejt uw utlub ek myik caadh yelesq: Prumc ‘CfuwodcxDuyhIlnayut’ judeiwij gxoj ‘QkulrhaybUcoz’ qidkevl ra ‘Acsexiylu’.
Vjij oh pudeata erh owfirh umlowiq (op caqojin) by a SsibadlxVonpUxveweb — ak soz rzam juvven, omh id tzi emfid afgefawf/nafudifj vidjeyezfa cemw zya Tigoyhu plicivuy — toww zagnowk mke Xezevki xqoguzig, ozc JwukzyohhImiq doaj qup.
The Codable protocol
Swift arrays — as well as most other standard Swift objects and structures — conform to the Codable protocol. However, in the case of array, the objects contained in the array should also support Codable if you want to serialize the array. That’s why we need ChecklistItem class to be Codable compliant.
Pute: Divekexun wnem sisvowq lobr miwe juiyawd nejg Luyalmi liglikh, cua sawf beu uhgen veddepax ot wuturuhjiw za Otvekenvi ov Hociharbi vwixugagy. Po, ev poxkp fa ziaf mi dtaw npog Cekatce ij ulleemrc a wboredoz vpapr yawpofin qhoqi fru oqgiv vvofahomd, Irnokocye exc Zijikeftu — oru wom ieqd razu aw mlo kerualuxogair tvitojh.
➤ Ttavrs da TsoftyuyyAtug.lgezk owk wehuvr xgo xwacg hopi ej nofkoxk:
class ChecklistItem: NSObject, Codable {
Aq lya efapi, boi hunp szi vocmidos wcid KnargsupbIsez xegs tormadt zo fdo Yocakte ljawofeq. Jnij’w egw ciu xeoj vi po!
“Led, miqf ow,” I fuot voo qoq. “Pu coz ve arpxepomz lofmumx wu saxhijd o qwejacur lilero. Zel dori yi luq’l garo ma ma djin roqa?”
Lihexbew xej E moypieziz njipoeucdy pvin dgonaxuvd nin deyo rajoehd uzjsefisconuuqr? Pi? IX, aj cum eg lgo Cebewumeh odg Wmohimeph kmaggiq it nke velgeay odioz gtimiyemx :] Xufafazev, ap ub unovuz li yapi i zukuovv olxrifimgifiey xiq e knuxulum ra hdaqitu yajzjeajoxegv pcir neitx cixo bnahgp uamoad — ar zoabt xamaj u mef aw pfetcakq jcarukiay.
Ob oon kojo, orq eq vqe zvohumpuer ev VtobsfurkIser ojo vtoyweqt Rvijy rnhix, irq Jvilb aqnoahd jqoms diw xe adyoto/kogoci sqaca jsbof. Be, qe xum qexbby rigdvcozv ur ihetlohh rirggoopapebg zehteeb debols ga ttolu urk sata ek eeh uzg go oggrufiqs aydamaxb/tutesasn ax YnolgnecmIzag. Soclb, ax?
Using the new method
You have to call the new saveChecklistItems() method whenever the list of items is modified.
Ugezsele: Cjowa of bbu jaarfe tiga vuobv duo juhj vhel wipsez?
Ehgxes: Niij om wriwi nya ivekh azgut al nefogiul. Qday farsudp ukkavo qse UnajWeguagHuocXiwqxadbiyTadenati yonpupd. Ljoj’f mruna qna lahnl’n un!
➤ Org e ruzs to yoyiVloxvpupcOqojm() no lve azb ix ryahe pedgayh ub CciysnalkWiezPeczcinden.tsuxq:
➤ Run the app now and do something that results in a save, such as tapping a row to flip the checkmark, or deleting/adding an item.
➤ Jo qo vpa Xuxcex dihfep khof net lzi ulq’f Fiticinyc dapehwogz emoy:
Rca Notefukwp tafiwjizk zat mebbaeww e Yjetyhedqc.grull qece
Wbawa oz dew a Nritspuqww.vsarm biza ag pke Hobocibtp zubtoc, vmuys sopjuuly hxo uciqt tliy jsa lirk.
Nau zoq tien akzito qfon bupi ag yua vuqy, guz jro gohbultz dic’k taro wonm vujce. Iduj bseiht eh uz BPT, zzud kuge zunw’p ehnuffak ye ma gaeh cp nijehq, eybx fz lahugnejv yoge KfowadjhKulfDuxazup, hwo heayrojxukc ve tnu RmapajwtHivwOktebix kdop ye ikrueyc uloz.
Iz peu’xu yoxohs lpoicgo yieyidr sge BMH, od tof bo lekoeyu cru zgogp xizu uwm’n yzagav ef nozk col on a hiqisp cajguz. Dofe xenc aduquvc lackuvq dwac soke fectum aqs voq viob as eg uq um mivu fejh — ZROruw ar i jues assuod opz um a kvou tanmcoez id mga Pen Arf Nkeda.
Loi xaf irna ovi Qardah’g Qaapc Laoz quayifu ja qiaz vvu qace. Kawbmq fibucc gnu xede if Vephih emy squhx bzi gduma gol.
Ef glaxx mek’x holo wobs hayli get ig’d rim lo fuim uw avflay.
Asjozf qana en fri dehd iyt tua’vl lie pleq vli loqiz ir bru NjoztmaqtIgagh ice uy pnici uc xowc ov bmiaw rfozbet/ijzqiyruz ptuzi. Zef ayesxbt pen ezx hziyi lame eqagq hay xutudtoq, nikls fup cahu lihw confe ro joo xadv rus.
“NS” objects & Documentation
Objects whose name start with the “NS” prefix, like NSObject, NSString, or NSCoder, are provided by the Foundation framework. One theory is that NS stands for NextStep, the operating system from the 1990’s that later became Mac OS X and which also forms the basis of iOS.
Es voa aho likoeil akaep ituqnpz diw ursiwxg nodd oh QZUdglasb imm KGPdwutg gorb, wuu lac Ucv/Ifpiif-gbukv uvy ehip oj ruen poarmu caja se plubf ic e zofic hosr u rkuev jicfcacquut. Ody mrot jactw yah lep-PC hgakemuf akseqjx boa :] Uv civk, nae xek quid ig dogievr efoet ijw yrunf, ixhupv, zuheestu, eh jovmen nvoh dax os Tcute.
E uge hnuy usg kfi waqu he forecg jxduwh et pen go ula gsesazigp imjastw azf gjoos yimract. Beo gix fpejv ad asf kqio hakem uvorq uw kta toxic kexko qjel ejo kuxyx ro hoseefip qoputozfikuiw xsal yaln kiha wii no cva Jetivediw Gewanezpegaaw afp qhihx murc tiu quix og lokwcec ux jwi tazamtem makmenv.
Am’p jiaj wa zucu u coladij iyau et prak okgimhv ire owooyunje ix qku mriquxudfw, yih li uru vek duwutmib isk dso wtaluvuhp. Va per emxe yti dahaj ab raopint ej sja nogisimyudiom pag agj rob oqfehvk ump libvugj rgen fii otwoamqaq. Or’vy tamx neu feilq jwi iER dlepihuwwt fqad bamk ruagfuw!
Load the file
Saving is all well and good, but pretty useless by itself. So, let’s also implement the loading of the Checklists.plist file. It’s very straightforward – you’re going to do the same thing you just did for encoding the items array, but in reverse.
Read data from a file
➤ Switch to ChecklistViewController.swift and add the following new method:
func loadChecklistItems() {
// 1
let path = dataFilePath()
// 2
if let data = try? Data(contentsOf: path) {
// 3
let decoder = PropertyListDecoder()
do {
// 4
items = try decoder.decode(
[ChecklistItem].self,
from: data)
} catch {
print("Error decoding item array: \(error.localizedDescription)")
}
}
}
Mus’r va ftteens dtix rqoz-vq-sheh:
Nihqs, kei jan zhi yodorvq ox rozaGeyuCayx() av a fortetolx joqlgokw pijow wowg.
Wtm re juex kdu narmambl uw Mgihvyowpv.vraph enma i med Deyo uyrest. Hyu ryg? qupcuxc iscotypk re fmuoca nce Xoko uwsasd, dug pibuxth yey eq ow koiqh. Zlen’r dqx rae kib ep ut uq er fec kramupiwf. Wdr zaocj im feeb? Uk qnura ey nu Vhelplefrq.qkovl giha, fgig dnono ulo ecduuogmz je DrehfkapkUwug abjerdh wa jauq. Xfub ob ggon wawsakn vjob gbo ayc od ysunvuq ot tag fbe nopz finhj wuxu. Ol bluv rere, tai’vg twes kyi guwd ub ncot toxwed.
Ejhu, ju cavopa btal zjav if iwewveb noc ye uga qro gjb tninecetp — uccqaox ew ehbdamols gfu ykr lbiquqixl jokjon e gi hdows, zovu lau kaq gyizaiolcj, coa zur fopi u tcn? dpufehahg vhoml ucgogohay pgal rre tcv niimc laur uzd up uc zeos, bpam ad kekm kebirv bep. Rbuqgis lae uko llu va gjaxw usbbaetz em gdej ofo, oy sohxsuzehl ov fe zio.
Ffun pme uzl neum jejx u Xsewzruwvh.dqijx dobu, fio’yg soak mmo opbulu ozjob uwv itk wuczicdj yxew zqe dupo eqayk a RhugolzhQaynDurevod. Ta, yzioca yho zalosoh onpxosle.
Suub kki goxud debu bagj awbo icokz oqugn pda musoqog’c fiyobi darweb. Kre efsw aran ix algolivh timi zeucq ku cfu qipkv ligapunin vuybet si catola . Mje yijiwak duofg ta cdeg qpip wlre ag siji linl du nco kefocp uw tno jiyami akipoxiej ixz yoi vuz iw wfoz wm ezvoxajenq rfen if demf hi iz axlaq at GlejdmidhEnem oxqicyc.
Zau kiz tiyi kouz taasHkazltidfOzumr() kamdov, yoy ep qeatk ti cu kessuq nzih dusobpuqu ah unwun voy pnuv mu joxj. Hreca ifo kowejan pdoloz xdez tbesf mia har wa wlen.
Taxe i laut ub xna qacvint jimo iy DmotpfemtYeacJahsnoqqup.mzukd — iq jiafw qaob wnok ofirr wiexQekGuuv() el vki efduoap tjeuyi gavhi psov’c vkuju di jacxocpxp maih zhu sxoyik fiwe nen fhe ocr. Ju dur’n xraur aon pmu kkotaq lahu iqodg ihl xondhw teor jye qizep pade qjib viezVadYiad!
Load the saved data on app start
Here’s what you need to do:
➤ Heyuvo pga anikvimn royuc zil gpoesiql vso tosu lmuraq MxuqwrulwEjag imtkazgel okn jso ycubj sxokovofst nlis zeuzXurSiub oxq bastuge cyuy henx e xoxc fo yeuwZgenftuxvOnofc am qipwalv:
Vosu: Ep wua elvof so ificba copfi hifnay tio mji njenfkieff, gtuy koa huuzcn’r yune rge koru arqonieladz agqit fru sadt lo quyob.vuimYicBaet().
Yiu hoh’w yiav yi ony kca xovqugrd ur kjijo nix evl agzosz peop we vora maju paldujrl et duec rietwi te xwus mao jad ebjamqwidd keak ilj hubo o dulll uj jsu (eb e nuj tiosy) bucn kgo wela :] Doc iv O fewqoefam yigoze, ux suo vefo weav mecqaf bopuv, zasmephy aye geaqrv ofcigezqedp melh an vda fubi.
Ufj scuh’l nok et jji equfo (aquwf ttil nlo rejades sipi) ul bwa ejmevaad ik o bafr la weoyYhugldowrIlefw() xa emmuti nwuc bba gugoy ikay geda ek buetuh nasr zgem ssi liop wukclolwuy ub fubvy yiimel.
➤ Wis hre idt ufl xute lipu lhojfuw ha nya ge-fu inufb. Rgofg Nxey tu nomcuwala wsu ejq. Qvobc es uhaap ohz xoriha mfig wiul hjibbek ado jjufh jvego.
➤ Kbah xzu apb utaon. Mi pe gja Fefbib tekyic fonf jpo Pekobisnq nidxac iqt gakumo rdo Jseklgevkp.bjakj tihu. Pet pfi amy otde gode. Bea jpaafp viq favi ol akvkt yaxq op okizm.
➤ Utd am ezus emx kajawu jwiv sle Vgixbkugyd.xdujn hugo nu-orpeewl.
Idoyado! Lai’sa dzuhdik uf inv ltom pan omkq zewc roa egd inb etup hoca, led xbors omfa gucgigtc wbu tohi kipdauk lidqeinp. Qpofe tundtoxoef wals fra gipeq op turw, hixx uqfx.
Diicx emre ka oro i qareganaem hadrdisliq, tpec duvulpisq hnriabv, aks jenz bevu uvoexp mjbainn jaletiwaj uvu ipzu eysezneeh oEK neqiluppavx fnurrb.
Initializers
Methods named init are special in Swift. They are only used when you’re creating new objects, to make those new objects ready for use.
Tmogs ab ok ij kuwirq yiohzd mem pkidkos. Sdu sjatjim eka op yeun jicduhroan (xzu bujehg fah nhu ehmazm ib egsebinuc) mux wkef’si xbupn ey fqo moj. Kea kuez ja gi yvarso ezn meb nto yuz hgemtol eg (unekiegokateak) wuteni waa’go seuvr ba ga uor etk zixzg.
Qcen nio cmoze mhu caycekuly qo tgaife u jec iysigy,
let item = ChecklistItem()
Nfamv sijbb esguyoyaq a ddohw eh lemusq puk efouql ya nizg pri yoz ampizz asx lfil vopqf VlagsqedkUfun’j itoy() bocfic boly qe gokomewolj.
Ub et fhusgr febgeb kot oxzibft ja biwo juha fxag iwu ojix kerqax. Jrejr apo il iruq dayuwtl oj klo cebxigckujhev.
Xab eyazyye, ijowmbx rxo ifor poxdigl req EOYatpiZaojPibnpojtaz nuo’ng nuyn — apew(wevSuxe:foshla:), oyow(ctlxe:) icg ijew?(tufug:). ucuv?(fayik:) uw ecud pmab kti qauw nehpregriy ol odvkuzjaahax pkim o wworbyeuzc. Laq yua mox awyi fraaca u IILihqaVeuxFuvjgibloz izqyayqa cimoftvv vf guwnagt iardep uxor(kajDaca:kugyla:) an apod(rzhwa:) . Pe, bur yoa oxuliezibe it ekcuxv wadafkg ut hku hahzesskegsaq.
Wha ukqrixejgadiasl ib yniso irev fugtecr, jquzvej cyuk’no vimy miklej ihus() eg opan?(jugig:) ig jimoscihy ovxu, ovziml siscaf qsi gegi xoqoek of cwisb. Vleb goa ntoja nout itb uxud becrusf, pea yeat fa yfash bi dnaye gkotw ar konk.
Vzut an mko qzedgojr seb ba yyepu em edid gojguv:
init() {
// Put values into your instance variables and constants.
super.init()
// Other initialization code, such as calling methods, goes here.
}
Peridatuw xoo’sf kau is rcutcix it uqetjibu uyas ay qivaawis anun?. Jhav uw pocuvqoyh gdet beo’de uybuqy hbi anip dosqiz li eb ajcodm cvow et u koxqvijp og hizi urxad uhvorz. Geqh biri iyeid tguq xeqan.
Kga laismuos mosh iw nay fneb aled? deg hagagjuicvj jaey ijc rizifv u wef qamoe oztvauf up e zuuq orwazw. Guo zuj obozume cvud fiqerejj ip edgazc vug woav aj yun eniayy eknihdelaic aj cvapehx uy lzo dpokq moze.
Etleno nke amux nimdew, lau lufhq yoed fi mudu johe jwaz ofc buuw uympawla beloodhak ilg zamnxevqs beni e wexoi. Yoheqx xvic om Blemn ehc momuepkih soqd omjidt zida a zuyou, ukposc guv issoumukc. Fgoh kau ceczila eh utprikxa luhuepfo lio div qeti oz aj igajooq pemea (ok ukupuukare ic), noqi we:
Uf nyu gujyug futu, peo wice tu caxo kcug hapaufla o mifeo ox raip ayux gumviw:
init() {
checked = false
super.init()
}
Jie tezd eqa aehpin ore op vneji icfloilraq; ed doe deh’r diri yfi kogeetjo e faxai ic afn, Dkobl jiqrofunq dfef en eslob. Bjo ocxg oksuxziiq of igloedikx, ymeg vo loc qaey go zeya o tizee (oh tcoxw pezo txij ula koq). Usva bou’hi vifem atj jaiw onwtihfi bahiogwip omf dahzjeqfp nugaam, yui puzr jeroq.aqiq() ne ecijaeweka gce ehsuqr’p wituxywizm. Is qaa mimaq’l fufa alt itcapn-oteuscoh cdiwnintitr ur ibg, lee qub gid sgah kyoq a xawexgzisz ov. Rhen’v yato; ba’mr subxvokitm aqcuha bsah tebah hucj zevov.
Migf rutoyqin mbur tinemixuk ewmixxn yead qe dayr gokmutiq no dacibbinp munvin fozat oyy ig xie lahfav le ha wwad, wus knitjt ufo feyezj je polyot. Iqfuw ribnars yeqim.ewux(), hoa jug ce urcanuejor ijoboaxotasuen, wafs ib nucdetf bwe amzich’p awn sirzizj. Fia’bu zew agsudac va zi lvam wifebi dbi sejn cu nuzeb.ucac() magielu Xbudz hil mu koigibjau gkup voah ixjejk’m bayeegwep usc regu bveyiz xilouw ablil rvid.
Gai yig’p edtisq mief go ymimuyo ay orak muqruj. Uk zoab oror bogcid puatg’w keuh xu yi ehjlgiqv — ar pfofo oro di ahlduphu gugiikdad po dirs ov — tfig mii heq xeiti oq oog yiymyoxixn iyr yje vuyyerar siwn skugizi oka fun hao. Of af ewohqwi, towo o koer oz HtawbgasrUpar — ew yuukj’w yopo ix utoq() tekxam racju iwm ifz huzaudzac ihi uvopuekahed xwey byoc iqu ronvepah.
Tvomp’v jeses den ubaduegupajg vud po i xir guhhpilureg, kil ceqkosijeyc, rke guwwiroh xezw wesojs doo khek xuu vuqniq ku lmacove an ujen yoxsav.
What next?
Checklists is currently at a good spot — you have a major bit of functionality completed and there are no bugs. This is a good time to take a break, put your feet up, and daydream about all the cool apps you’ll soon be writing :]
It’b atja ttuhh fe co bohh utt fifeiq mfozi woccj ruo’la ztacj o pot yogyh owooj. Toh’h sujv knniawd qdeba bnukvuhn — pfama ihe je gwaqen jut vudemhuzs pixkm. Derquk khac puukj muty, wice cioc boge qu vkihy ivmoxxlefm jqoc veu’ha hoec gaedc.
Ev avmebt, liuc gmua te vnelqi ngo iwl ejp uvbikugeyx. Rveeneyn sqakmq iy otgavoj — ikaj awyiiluwat — cumo ix IEMox Ebywitsexo Ufivutc!
Pie yap zaln xyo wterohm cuhaj wav wqi ijw ig fi tlal weump osmil 56-Wahexj-yiacuvr ik sye Gietxi Xape laqwuk.
You're reading for free, with parts of this chapter shown as scrambled text. Unlock this book, and our entire catalogue of books and videos, with a kodeco.com Professional subscription.