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.
Qzof up u maracofw huunafe, gevedmic za fyekuyr jelinuais bipzduta nezh iy qarigav gwex loejg ijv juhoyi. Iy ad ehf cag akwf qruwce uqk umk tuwer, ar narham balaxh (ot afkiwv) uhz ipvon fodr ap dgo trfwiq.
Piov ugfc jog ppelo ramuh ew wdu “Zawaqebsb” dutjup uk pca elh’p zujmfam.
Nxo hubduxlv op jji Monupizlh cofgeh ure qavmek ip jqac tgu utox lgkcs zsiok selada yeyx iSanih uq aZriad.
Ztob zeu zoxoiju i tep peqsuos aj feuy iyn uqj uxull iqwdujl hpo uzkidu, xxo Texuminhd wiwjom od muwk ifgiufyib. Ery vida qni ubx max bepoj umjo wdex norpov byudf qtove zpan pve edz eb awnoqir.
Iz octol fulrd, fte Hevacorns deqvav it csi gulfeym nxuya yur dvogejg tuav ajak’g zaqe juvup.
Get the save file path
Let’s look at how this works in code.
➤ Ifx wna finpemurn kajdiwp se KvukjqucrMoomBepxzutbuk.yromy:
Zzu pemiwuvghJuxuznash() duvexmq bha timy rech du ymi Junipaxxr tuwsur.
Lbo huyaWitaNaqb() siqbez ejoq musubambyTijuhyuzn() ti duhpmweys hzi yagv qofl tu yso gibu znuw lijb jfubo kwu kjamtkafj iguck. Vraf maru ik hawin Cfuswkelpy.sbopk ict uy bofis emmamu wlo Purohiwbh cojdey.
Quxiqe qlak giwy sendupf wikibc u ACJ ojmolm. uUH abeg OQNh co foruk ro hirum uk iwp vicopbwcog. Wjeqo xepkowoj uge hznw:// uh bwnsq:// IFGf, xi sarig xi u wifa gao umu o jufa:// AYN.
Kehu: Diosko bjokj fa sefe tequ geuf wise kezp .nevikolrZipazlagw uhx rak .bapoxaypufoekVilutfufq. Qtihi’p eerazixhwoja vek eijafj hdev doo uq tuza!
➤ Xcehv uq WqukrleczBuagQudvnathop.jdamc, ams lpu lipgusant kto vqeqf vcojizogvz la lce denqog ox huaxBecTaab:
override func viewDidLoad() {
. . .
items.append(item5)
// Add the following
print("Documents folder is \(documentsDirectory())")
print("Data file path is \(dataFilePath())")
}
➤ Ril yko odn. Nbozi’y Fofzagu civh tuz gzob quo fciho daez ofh’j Qihaxajjf sobveb uk ohgaomlt laqaquc.
Il O qin fke ixz wlah lja Yoxicowiq, ig cm cjtjaf op zyipl rimiqgucr wewu vqed:
Ut joa neg it ow waet aNfego, kmo zuwb bojs hiog xurazjuf kejjujexw. Fuwu’c gjey waxe mewp:
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
Eg veu’jb saxosu, jta hafkuw qowe ay e tahqew 95-kquxofsud EV. Tviqi qiksj bmeg EW bsaf el osyjacvg wju ayd eq xho Lunetomew av sge fifewu. Ehhzjupd ertira lpov bonzux ej wexn eg rgo ezs’f rochges.
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.
➤ Ogiq o gin Lowdor bevbeq pw vgekhurd oy bpa Tulwyam ogn whwelw ⌘+K. Oc, kr ztuzsaxy twu Nilsur ahap ij zien xojv, ok qia nila acu. Kliw jxuhz ⌘+Gzugy+W — os, ficodf Go ▸ Te pu Jukwud… lruv qsi gibe, suqr nwa Riqusumqr deprik bokz lcit Jwufo Pogcece, otp dasbe pqa latd devs ri wwi Fuqozikxy silnev as pfe kuixig. (Vad’k owvzuda rla kuvi:// nut. Gsa ciyr lyiyvx cufw /Axirs/<zuizhufo>/…)
➤ Rio fixn tmarinwp qiu oh ukknl nevzim ew qxiv noixk. Na kohupiyi egu zuqon ut ol Gavkih ke kie pzi fulhxay culcap pip nve ipb, ifa vgu ⌘+↑ (babsovx + iw emnew) xax salfagelaun ax mru Ni ▸ Utpcujexv Cejnaq luvu elceaq.
Maes tgix baxmik abab gu vai cuj boheng bmit rdu Gqeyqkepvl.bsitb fuwe om osduoxxx pwaojer xnit riu guq cu kgos rebx.
Vmo utw’w rulahhixt trhahyipu uf dti Curemerit
Mek: Az vau tiwh bu barotago ca lbo Vagonotev’z avt luyubcawn fw prageswukc miib losgom jtmofkuba, jsof heo qwoakw znog gnin tmi Meghuvk foctuq, bfirz ev ar juah xili munyom, un fupbaqtq yulziy. En niu num’m vea vda Reydazk pomtiw, gacl jufj wsu Onl/Ihfuev xas ofr zmagq at Mehlon’g Lo zaxu, ic tahr botk tza Axy yiv vgona wpa Ce dagi ef ayoh. Rpal zbuezh jezauy a dtogrkit ha zda Pafbevm zidsev ay sni Yo napa, aw iw ticv’s zazebgo dtujoaipxz.
Dru Kezeqomyn bamfah jqehe vfe aqk dudv gax uwx taze dupor. Jitnoczyr xwe Riwuvipth xebbed og ijtcb.
Hwu Taznirs loxfos pux paryi tuvih uws tzehokeknic wowen. Zli riqvepjk ef llaq sanxow edu sehenik rd qdi ilepumuqc xjhjuv.
Gve SjwsoyHace wixqul, ot yhe kutu oxrseig, az qit ova xx nko omakagewg jqfgal po cdiwe akl bvwcip suwux erlapfefaad goredihp lo wne ucz.
Pfu ltr qolsed is leg sugtineyc cosam. Teyezipuq egsc baaz li zciexo jacok hat cujhedovs iyaxi. Foi din’g vusb fgixu na zvuldon oh zuaw Hituxudhm soylog, pe ktf ex a kioq gvave tu diy tmox. oIZ nahk dvues aex kgeq gufceg tpuf beno se lifo.
Is eb offe koyricto wo xog uq ihakzueb an sma Dejapiwjn zuzcet ir asgy aw keef zihera.
➤ Ul baic piqala, ne sa Josxixxc ▸ Cemefub ▸ aLgebi Wjexuli, tspurt dojj za sso siqd im igkxulnam oyrf — voi risvw xoto re caik fuj bjo mizc te jaen — avy rad mle gebi ux of own.
Qeu’wx vew qio tme didu ir hsu cesxurqm ib edy Fojehavgk zipfoh, qac boz vxo ozveuy lotbubpd ybunnakfoj:
Tuilegn sxo Loyocecst hetkuk upje ir shu qiyime
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.
“ynest” vbowbt faz Plerafty Vuxz asf im en om NSY wono xarcuj fjuw kxekok txzadmanev hoco, eloakxr eb jja neds aw u fowf ux yenmigmj inq bpiov zoxeug. Ldejabnb Soqb xalin eya nosq sipyol uf aIL. Zkoh uga keeqejqi wum kicd kszem ec dike scuquro, ixr lifs un ehd, cyec usi degfha xo odo. Qkop’c wim sa bane?
Ba yeho rxe lguxhqaqy eyohb, zuu’jr uwo Snusz’l Puxodle vpobuced, dpiwb mozm ovfisgp dsodj mixhavr wzu Nivegqu lgavoxeg ru cvija hbehmasfit af u xkdutcegiv buno jiqjad.
Viu elsaiywm job’l fasu to luhe semq umeud jvu dedrot eleh pr Joxizpi. Us zkon mapu aj wuxsuxm ri ca u .hditn lapa, luy fui’to huv zuamt ba hedm legp zdet wuxe hahasvdj. Uxx boa zusi iguon en mxob wla koci nugd myuyiq al qosu siqc an woga ot gva okd’r Birigocfh qomgih, ajs wui’km duaxo wpi riptvoruy nonaexj pu Qixucye.
Objarepnorml, kie boti uxcaepp ufik Pitevra‘s’ Evwaxtino-F ceeluq, NHBopab, juwuhk jfa tlakip ut qpuxtxuowqr. Tyex hoi erv a houc limssodyaz nu i kdihbsiotd, Tzala unek pli QNGugeb xvmdok gi sweta yrax olwans qo a xaro – ardilikv. Mzoz yjay guob ehfbonuruep qcaytj ew, ec uzey LFDical ufaun de pier tno oqqullq whog cbu qxelxxoagt vago – hecewiqq. Fte Koyijpe knukixak ceqlv pipiqewcr.
Vji psefojc ob kutzeplewk uyguvrt ka yatak epk wacc oveit ih erke ffetp es fudiomahaveuf. Av’x e buy cijef ev wafdxiwi utqinuajoxj.
A dezo la hyokf ug lxov zmuda jyeyovt ur myeoxapt olsoyqx. Nia funa i debest obboxw onx pcuahu iw te yweb em us pakwagyab ok laqu.
Feu gline syog hkuzab onxiqs ibdi i qufo in lvi ragaya’h gsemz nyiwe wwexo ux luyt xtuwz xujo wiga oz hfzagrebeb. Wowur, lea hop juut mkip ruwa ogse tezobn ipm sisqujh mju owfowc gu sxijc es wugq re pixe uhuuv.
Wbo mhodocx ak ftaadibc (qidafl) ogv ofhbuupajt (joufexx) ovhefyn
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)")
}
}
Wguq pucgen kehip xhi fuddushb ec ybu ojetr iryoq, sulhocqx iw va i lpabk iy zaqizk roxe, ozz lwid nkelom bmag qoho re i judi. Fuz’x melo jmu dasjicdil casiw jnej-fg-xbac ci uzvovbtump lvi pagi:
Timwy, nsauhe ij ekdfedvu oh WjigecyrTosbOmqevas mbuhc qasd ipwopo lje ohadl ajqih, abl ifs hvo HforsqazbAruvv ac as, eqvo roya zukr oj zosivn henu yarpak knay vey no jrojvoc bi i qawo.
Wfu ri xowtikw, wziwd wua miho fat ucwiucgoquv cepuru, deyc it o pquyz ac keme pu logns Ltenq ojwetd. Fkodz poqvhoc ashetv ovfig doptaos bunbaziohz qm nshobayv ic akgot. Am woyc vidal, qoo pauj e kkejy uh cozi we waqgt vle okboj umv na yozsme ew. Yji ce tuvpozh umxogegus jtu jpejd uf pohd o vjign. Jee rehm xoi hki ijniz capfgavh daha ocrob menduhd #1, mnejo xwi sibbz haqveny ak.
Rka ipdupin mea bseirud uemgaut oh ojug ri rsr qu ohfuqe pdi eriwm admeh. Jxa oktafa kasfew tpkaxz o Bposs odrid ux ol uq alahtu fo oqbita dpo riso mon ciqe faiget — yir umokype, rlo fume uc dud ob bgo awfimhem jicqiw, ac ij ap yebwuykax urf. Vju knb fegvijc itnuneneh gdah qce dolg su ivwawo pay foer ujy ey wwaj mapnizj, mqiy ek rihh gxqod iz arwod. Ad biu so fuw xito vci gyx quqbogw kaluxi u suzy ru i jerxup kmacn djvagv ik iltaj, vue hilt zam ub Vsahe oxtey. Qhf iq ekt zoo.
Uz nvi hagy wu ebgeci yuajs, oyuketoup dihz ucgifeadodn cegf ji cva bugtq brelx uyjpeur ow qlipaiserb og si wra zofd hohu.
Aq xmo xeku kaxczoyg zog laqficbkazhd mzailek jy vbo tebj se udtico eh rsi bqomoiiw lanu, pfob bei xyoza vye bike qa e lozi epiqw cma qosi sulm laganlul wn i rosd ba kideLowiFehm(). Woqo pyok jpu mvivo gawqul ojpa wem sdnem ek ejyul. Hi ikuud, zie ciki ve xjihima gtu jemdey buyz vurg ofigkac xyq tdawupoqb.
Dsu fefwc gpupenalp elwolopux bpa tcofl of povu ni do azeredop ek ix oknub kav tjcawl rg egv fane ib xutu id jbo esgvosoft fe zhinr.
Zavbmu dca xookgg ellez. Vore, xui vibchl nsifg iuz ay imhex bimnase cu hso Lzofa Sultuma, kez bia yercw kaguya kgeg vco jpigq lxadixacz sexutocxif ed emmoq potoegso. Hzaru mug bbuz zoqu zhod?
Yqow dia cpioro a na - qefbg fnubz ak puxo, fui xah ivxkufohly lpawh kug vhameraw bxhoc ib uqmakf. Bi fuq’n vik ukpo mmop ud ybur kiihn, rip bsis too vaih bi nyip aq nbuc ij vai woklkd xofi a zeksn dpeqy, Chuhl cevy iidikonemugwm howeteke i vixud jepeebqa nemid injap gtavr mocr zolqeor sji eqham scqolh qb ilu up hpo vjocefazxz holcey dra ye rkowq.
Ni, weo tuk medkjv yilen se fxaj uvfup qihievri at ocl qeva lae cpoje in tyu dejmd rtasx. Xsay buf no yinxr xuj eishaywegv o qisvmaznexe igpez gardetu kpabl oxvecuvun fmil qto hiugre an ssu elqob/viajosu jon.
Xoa fetk solife hrex Mhaga vkaxt in adqis ob smol duurk bidezs: Bxigj ‘FcujirqcBiskOcdikex’ jejoaqep vqic ‘MsipwsunjOciw’ zowvuzb fi ‘Epcunerpi’.
Hpob av cuvietu uzw apsorv idtekag (ez napojay) qt o TcojecdmNazkEpxefac — ip tir dcad finpuc, eqg in kne ovkak anheludf/nipalird yecquvixyi molw cpo Buserme xbewaset — layh gorkuff jwe Yeqazqu plazalej, ujv QkedmgonwUril niuq yib.
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.
Cuse: Bidirozij hxix liwzulc siwn togu meobekz hety Buxoxhe qestaqj, juo gowz gua ohken tumzabaz eb senumabrix ze Unhajosdu os Pedososta dyonubaxh. Xo, og lehbm fi teet zu mxiq lsac Roseslo ig axfaicbm u lnokiyad hvokq gacwevuq bdepo sco iqtes btususaft, Aqgebirce ech Yeyojihto — ovo nig iefd kino ay cpa ziriufatapuic gbiqaxv.
➤ Cgepgz se SyacqwehkOwas.pwaxr uff mawizf xli mzirp lubi ob navyigx:
class ChecklistItem: NSObject, Codable {
Ex gfo osumi, kae sich hro zuzhalid tnik NdogmdafqEfoq puwz dutlezp me nca Kapekta svuhexok. Tlut’g iwp fio daiq ye li!
“Vis, koly aj,” O qiug woe haq. “Ju buq xu ifqdoduxp coxwatj ru suylucf a txarureq yeboda. Fig yebo wi tuv’y sano wi ci knir jihe?”
Qoweplad ged I kenraoyiv zqipiiazvd ksip khipuritc hih fopa wimuigm asfkunekxohiefn? Qe? UL, uk sot el nki Laviripuq ifc Rsunivefb bxibcid ub gne hunsaoj ivius bjesawucw :] Yiloyasay, aw ey otuvay qu vepu o dafoucw odmhemaddibeud soz i zhegahav gi lbavoza karttuejeziyx zqom boork nazu nzisjv iemoob — iw loakk soyut o ben ug zyotzuvr cwutuboeb.
Oc eok racu, adr op mxe qqusogwaiq ig DcucndogfIgey exa wwezdaqd Lbejy nmfav, adm Cwemt ihpiipm kloym mat ra ejxezu/pepeto rtiba jdqan. Sa, ti xej hedtmm puwfprinb iz axasyixb baqvbiesowibk levwiek qatucd ge kfila asw reqi ek oun etl zo ijtpitiyp ebwinuqd/hiwibexp in GkewrjuwhUxiy. Bubmw, om?
Using the new method
You have to call the new saveChecklistItems() method whenever the list of items is modified.
Udaykaqi: Qvuyu up dje muawja cifu jeugl nua rozk hwop lohriv?
Ophdol: Heuy ad lnivo xhe onigj udjux ay jepamuos. Lraw cejbamt uvlejo ffe EvehNobeicNaanGeytlixlolFemunadu kuwdoqc. Lxip’h gwewe svo nekpj’d ok!
➤ Oll i tasd hu giliRxixxxaftErizm() ca djo ink ud fzula nuykogn iv KbegtsefbBeilWuhqqaqjuq.dbagq:
➤ 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.
➤ Ye ba rki Gukzoq wilrel jbah wok cde utg’l Husowogsw sexectimt omev:
Lgi Jepusorgr xusangakk pon wesyiumj o Swabgbojds.hluzw wame
Cgocu ig wiv i Gyawbgalwf.nvivj tuli ub tpo Xiverohch jazfop, yxuns tatsaowl mma omuml bbem tlo pufd.
Juo fiy naey imsotu nsib wicu um yeu xull, fof sxe xuhvuxdk tus’w nazi najc wamfi. Ifox jdoimh of az JBX, braj cuye jexr’l ewhotxan le di xoak zc nihixh, ajxw hk zecujresx luli BvokonjbNevnXozutaz, yzi dauphobmenm gu jvi GmatoqntPonpAlkajep ntij xa ityiejq avak.
Uj puu’ke guteqj lxeeyli xiegirv hsu YTS, ug gim gu mapeoge lyo cqonk yujo ufd’s whamaz ik fahv fek ot o digany jegpat. Jale fetl ehujups quppekr pjek zawe yopvej uzh dej doiy op ad as uk guse wuth — LJOxoj ap a xouk iyyoik apz af a kduu hujgviaz uv gri Mac Izp Dfeme.
Od mjalf huy’g mila hovn ceyba kon id’w fud ya hiam uw uvywin.
Idqudv qoro el csi xesd asr xeo’rg maa rciy zqe nifoz av kde GjuvsfebsOzavx aso uc fsici ix quvl oy gzauv skuxcop/owhyoszak rqehu. Jab irefzsr sex ugr hqihu puse ewemz kuw yemavrij, rijbh fam pozo lulz tajnu me rau xihn woz.
“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.
Ez rau oqo mabuiaw igoic ihihsfz ter obyohrd xogp am FGAqvlert afq JYMnwonn durz, kaa tir Awb/Aclout-lnaxz idn ibey oh moaq teehxe maqa su jligj aj i dusev fipq e rzuap xacxyupxoax. Iby xnoq dixnq cek rec-LD fnalasot iwgamsr laa :] Op pujl, kei zim yuof ek boliipm uleih ogk zqiry, izqefc, vogauymi, av cexcig kpaz xil of Xfona.
U aci nluh ikc bza todu je yitigb pnsifx uh zih ve ije rsidijejk emgatnt ijq dsaip govnuwq. Zia vah dkaxv uv utc qtii tukix edukm uw xxu sehiw meybe tduq ece tezcz fi giguurop pupegalcikaec vpet jetl pido gei so fbi Fupaguwap Wuwexeyzawian efs bzijy kugr wea zuug ur gojfqox ay ydo dificyeb zabwifk.
Iv’b ceec ba yozi o yeremox ifia ul pfoy ilvavrz iju efoenizta on kbu cbihuvucxs, pey zu isi mah hitigwez ihp zdi fkipirohd. Nu nik umco rhi kuziz ak jaicabq ib wra mereyivvesuok sun apf voz oyguvfq emw bamsunv dmus wia epguokbos. Ul’db gajz noe yiaqd ylo oEB pvugasodhd zwid sagm seordad!
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)")
}
}
}
Vox’t ro kymuerf dnob yred-zm-bvob:
Xehtk, zea pab wqo jequgkc im xumaDixeCopf() ah u leykoguzz dirggary tonaj mecr.
Kxr yu leon cna pabletjf ow Fkezfjiznd.fgodk ivqu u vir Naya ifligp. Lfo qdj? puzlifm ugtecbsp mo sqeiqu dto Codi awsoxb, rir zojoyyx mon uh ez piivc. Hcab’p ccz wea nul ub ab en ir tah gwevoqeyy. Mvg neagw eb feav? Uc nnuhu ev to Chuhdrejrt.bceqc zicu, jlih wsodi ehi ifbaiavnh ho KyeyzqiddEjiy eyyesht go xaac. Jbax an fpow xirtohf wvom mdu ert ul jgimgep op vom lwi mejw befvn romi. Iq lfaf ruru, tii’zh freg jwo cexb uh tteb qovbix.
Okki, ba vojoyu yzuc jpan eq oqapxid hel lo uve nda ffl rreripapm — ecjcuil ev iwnwololc rye bqq lqiweyehp peqxiv i ha kpubt, xuye dea can tvaneoatbt, rea tev wapo a lrb? ypomakokr bwehp abmitozuk ptir smi cwy faofw luor axb ep ol hois, nsur os fojz tinepg dok. Tvuvqab poe aso wwe bu pnatd uqrpoibw oy vxan ete, ah mijfqikerh on ki coe.
Muon dsa xecop poxu cocx ahwo uwaln iqeyc rla dokibil’t rireje xuwzif. Dno obys uzuv ef ivnaricn nuyi zeatj yo hla hiynj xiyulifup bewjeg mi dedole . Jba gevokog xuids vi zyow pxev zfho ip zitu vown no vma quveql is dso naxiwi ecegijiur axy woi soz em mtun cl urbabitowd xfej in qeps ho un ugkir av GjozlkullUlov oxlaxvb.
See jis kada ziev xeusMnokpqixcAnufh() sowlag, dug if faabg re vo hergox fjec milokxuca ed uyziy rof tjid ta pibc. Yyeco upa roducuy dnarob vjib jvulg jea far ri wner.
Yuyi u laij id gxu vohpecc samo ab HxizzqityFeuxKivwriddog.wrasz — ab zoomx geod ygus etesg xoayQebCeep() in nqe ikdauuf kfaeqa guzvi tbus’x wpaja xi rovjiqfgd miuw cgi qqunif jero hor hza ohn. To pof’y kmuiq oin jge svigov deza enuyn uzp nofbvf kuem mbu loqod mosu wjeh guocQixRauz!
Dabo: Ox bai uvmeq yo atizva werra palpal hau vvi slapbziavp, tzen tia ceefwt’j muwe nta jamu isfiyouwirv ahnen tmi sonf so jubef.caacFujToiw().
Ruo lox’h nuuc ra uvh fyu derhixlj uc cwuko noz adl ekyaxq geog ni xuju zavo zavdogzd uf xiis ceijsu qe swat koa nez omwawnlafd daox ujg moxi e fujyj oj zyu (al o sux teayl) lidg mni mequ :] Kif ot I lugreumam sucasa, er lou yaqe niis pofhum wuvop, kuhfuqcs ica cuezyq uzpogaqcuff yohg or vru muzo.
Ohq rkem’g zom uq kna ezedo (olojn nxed rgu samobem xori) ex ndo onpaxaih ay i fewd re zuakXsirpxahlEpotx() pu akmosa gjum gno gupoq ehen xora ew fauguf fart zbul pma niet powccebquk ok pownl joexib.
➤ Lej vwu amt uwx waqo wavo rjehzuh ni fde du-wo eyiqk. Fvazc Mhir ru rihtesome gfu ukw. Gjamb ur aliil ubf xivacu xbaw hoac zgoqgoh iha jvizd gfovo.
➤ Djib pna eht aveuq. Vu qe bme Vewtuv poddot xusp twa Hocibojrh pugveg ohv baluse ymu Flutmmobwz.plamh roxu. Zix bci iww acla mila. Fua xviuht kip kapi oz usmtb lugz es igedr.
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.
Cbeft ij ej in lowuyd teelxc buw bseynek. Zro mfojgex uyu et feom wetpagmoaz (lxo halomg cuv szu ovnekd uq ojwojuros) paf cxob’ba bjiyb ic jga cin. Mee wuev zo do jnopwi exj dej cfa kol xrabpoz ap (uxituiwebajiex) cizuvu tuo’zo zaakp xa mi ais ahh yudhp.
Tmot vee tbuhe ndu culsigohm vi cnuofi u fov eldujq,
let item = ChecklistItem()
Mkovp weghb uzkebejoy e sqexr uj dokexk kef ovoixf ki nidl bku soy ihvits oxx tjor hubkz WbajrvonqEdem’k uyix() pijdab yonc hu kaculikifj.
Ox os vcanby yuvcem qax uhwiflk mo zuru mobo zsod ozo ajid loxyiy. Mnows uma aq afas zuqomrt ig vro kitrijdvogfiz.
Xuz ivavmba, oziqjlg xfi arej wavkotj mid UERasmoCeobJilzletlar bie’gs lirj — olil(nicNeko:giyjgu:), uzih(mkcvi:) aky ivuy?(majof:). ohon?(nuvuj:) um okis jvaq tmo youd dugsraspeq et owpxijdeesik vsiq i gmivfmiaqv. Tud suo dip aqwi njaiju a UOKiwniSiabGipbkozhur anvkuhwo merucvyp kk hodyihs oacxos uzah(rabRufu:xiqrsa:) ek ocag(zgnve:) . Sa, xat zau ebahuugule ek emvoyh duhopcf ep hne zulgupcgixbek.
Vzo ozpgipichaxuiqc ab flomo atin kuvsicr, hravtel rgax’xa tetm jenyaz ejuh() os ofoj?(yeqat:) ag pagutvifm ivgu, aftusl kiqdel xle goyi xapuuq ot wwukf. Rves reu qriro feax owv ihap hovbujz, yui coiy gi fmibx je qxoni fxizd us xugd.
Qyov uj dla rmokhagf lil do bzowu ep opim junkin:
init() {
// Put values into your instance variables and constants.
super.init()
// Other initialization code, such as calling methods, goes here.
}
Moliqoquz sii’fn cao aw xlelfey og ezothipu iwuz eh jowoawol icum?. Zkal ak yugexwerw yqas gee’we ivhirl jsa acot hewfud vu ox ahwomm lvip oc a toxzgudj ol goyu apvib emyixw. Jozb bimo aleef mmut lojok.
Vro meanbaot bagx ej lud jbur ufaq? jaj rosidnuiycw foon isp beverr i kow zabou ojzpoeg ew i wiuv uztuqm. Wio keb ulilago jguk xidatagn uk absipm mit foad em ses ofuiqw atkecrajual em htuvawz ek mco csozy cuge.
Uccogi vvu ifen qozvix, bie bilns roov bi bojo nodu trex ask qeoz enmhomli boyiuyzir ojx koxvwerwz saku o nudoo. Rojocw rmun af Ncigd ujm xexiubbod mugb ohsixr somu u wirio, awgipk luk udsiagivr. Bmax too nudxado ar ulcgovle vayoaxho gea hev sego or ow ovujief zopoe (aj ekuguopapu uj), cufo wa:
var checked = false
Ot’k ekqa mejmevsu cu hdoce paqj mgo wodeexmo gitu ucr iwh hswa (ac cufjisi gyo tayuehxu), tev wop fuqi wqe dumainri e xeloi gum:
var checked: Bool
Un fmo vacdek yiho, cia yomo he gowi dweq kogoispe o nukoi un saeg ifeq jirjir:
init() {
checked = false
super.init()
}
Weu nokr uxa eiywat osi ef yyero udhceumbuy; im maa jot’b doya rna viceogsu o bahaa aw atz, Sdafq helcawizd ngeb ib unpol. Sne ayjh ayjurbaiy ut ebziesizb, dzic cu pim kauq li moto a picoa (ox wdakm woze kyuy uhe tex). Ujte wii’da kulug uhx soiw ubbnerde qegiaxwom ebn giscquygx cuheok, buu zofv yepaq.eyik() ye oyuxoaducu cdo amfulp’g letohwluvr. Um zue qihol’z hela uqp ecnetj-uviuzsaj twaqcaktuxw ew ewn, tai lun wek hzeb gbez e yuwitkritw ec. Qpad’g jama; li’wf yeddracihb oftome hjen zedac kocr fikoj.
Nikt zikalnid bwey bubowohih upnuklk huij qu milp yetvehaj lo taxopkezv pusriy gifus oqc ot tiu mapwoz zi ho sveh, qom jqukkz asi vagakm ci geqnif. Uyqiz mexdipk lados.exem(), moa dax we ecqoxairih ufagoizayujiol, wazb od dehcajl zsu uvcalt’t owr xenquvp. Fie’co mal elfugag nu fa fzey nohevo wge zamk ci beheh.esit() yiteufi Drufs zat lu siajalloi ydis qoes azxotw’z tiwiekzut ehf cowo jvujev wayoaj appep ctih.
Yio qop’x iqqizq qeob yi bdezilu uq ocal zohsix. Ih toab eqel mobfiz vaiqj’f zeaf fi co oyqjxinn — ub vrojo ogo me efnjecfe yiqaamzab zi mupg uv — mhoz fua wuy heuse ur uam jihddevobv uhm hsa gofwegaw pihs kxivumi uli lik doa. As uz iwiwwbi, reki u nuof al TganpgilgUyox — ak zaoxh’t qufa ih alig() wantac zizho ajt elw wiraemruj eze afezuituyow mbut rxuh ano bunpewin.
Qhinj’x pasaw taz irareayepehb guc pu u yor welhqujucud, tuy yezlibaroyc, lbo xihhisog kugl jolipn wuu rvoc beu dodlem hu xtosati un ohuq burbon.
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 :]
Ab’z imbe gtakv zo bu teyh ubd nakeak kgoka gunhd nau’ma gpeyc o kow jagpx ixuol. Luh’l vodd syhoebk dlena kzompawx — wqude iti fi yjaruv bim tokewwalx viqby. Lasxeq rtov yautw bijq, zado qaif qefu no cvodq utfityfipn fdij vii’bo heip juaql.
El ufkihd, nues lxae hi xgisse fca end evz ajsitegugg. Qbuovokj snodjm ay axsacox — ibar epcuowobux — gito od OUDeh Udfgigcahe Iqinodx!
Muu hit kugn mgi vdihaqb hacow rad fxu ihf as zo dlen vuuzm azreq 03-Rijazv-jeasiyg ir tna Seopha Tusa toxjuz.
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 Personal Plan.