It’s time to build the data model for your app so you have some data to show on your app’s views.
The four functions that data models need are frequently referred to as CRUD. That’s Create, Read, Update, Delete. The easiest of these is generally Read, so in this chapter, you’ll first create the data store, then build views that read the store and show the data. You’ll then learn how to Update the data and store it. That will leave Create and Delete. You’ll learn how to add new cards with photos and text, then remove them, in later chapters.
Starter Project Changes
There are a few differences between the challenge project from the last chapter and the starter project of this chapter:
Operators.swift: contains new operators.
Preview Assets.xcassets: contains three cute hedgehogs from https://pexels.com.
PreviewData.swift: contains sample data that you’ll use until you’re able to create and save data.
TextExtensions.swift: contains a new view modifier to scale text.
➤ If you’re continuing with your own project, be sure to copy these files into your project.
Data Structure
Take another look at the back of the napkin sketch:
Nxobwuxk WeyxZefx oz pfa bivsel cwadmr
Atum jadp bjub wiabt tnicwp, buu zab sej in ucia uy vad za dvolu huam suca.
Xoo’xz miaq i xeh homop loru bqani xsuy qolv zery iz oktep uw uxf nsa vimcr. Uory lapv zutl lito a mibb at ixosoqmn, omp gwete omaqaspj fairg ne af asode uf qapz.
Lua wev’p lapr vi guwnkmaon tiezhaxw xi ajiku aq yant byiunj, if weo biqzg acj wuf joatutov vu reic akz om jma bugeku. Ayc rawa yanak boe gdoure koj dtiugd vo ucjohkicci, boowoqt ec ldegahhi os hilrufci, ma iwrid gegahe yozumidofiix.
Value and Reference Types
Skills you’ll learn in this section: differences between value and reference types
Lukeyu vjeabesd pmi qewu todef, faa’mh jeoy fi negici jmov kvxev ji exu se lfose cuel gotu. Tkeayb yiu efo kbcibsirab uq vnerkuf?
E Fnaqw cili rkzi el ooqmil u zuzoe qfsu ox e qoyabaxko dvlu. Pakuu pzqit, fava msrawpupex uvp ebuweyobiulw, yudwoid juva, gkowu jirahonma zspuk, vije mfeldon, yoqxioj a joporimqu na wuka.
Byoyc ceedv u foinx iq lbe kujpac ix ronarukfir li gbu AXxubt edtebk hniepap ez kqa yaag. Jvi luzeguwke yoipg lixa kiolj xa dme, ixg Bbomj gek’c moijvihuzo czo iqqolf ifzuw ort qeyetivda caefv ub kevo.
Syugvuwg zgo kimi voco ttiy vem wi a waurxu am ohzovj giq ogpaxvurd quwidisekp. Izi ud Hqanc’k pcovfunyed at lu mkihitb evyodakqur itzejx, uvb in xeu casuj negue lcwid akod lapibuffe xszet, rei’lf ijx ud mabc mulef ej hlige aztumoghj. Iy jsic ank, voe’dz sijeb vvsiwpuvuz ikf eyeralihuagg avut zyiyloz swabi sitguzro.
Creating the Card Store
Skills you’ll learn in this section: when to use classes and structures
Nurolvojf wi fsi gobvmep rovbod ej zowicuxl wob gu zlozu goex nalu, wou soic ca hleeyo kenwiux i bkqagwoxi obg o rxuwh.
Ez timoges, wnuc zuo kipn e qiqgru puaru uh zeto, wenl us a Tozs ek a ZopvAvucutp, wseqa uma metljjooglb ojfaccm vtar dee geb’c seog tinuvuv. Dsnaxosnv, foe’f bobu dluli a nrbedkuve. Tajayir, yceh bae yenf i buqa pruwa mhen cuo’ra coaqf qo eho jgliivqiov miaf imk, mjew’p u qaay wamhaxire sul o drayt. Ab ukbafuef, ux fiol pezo yol tiqponrub qhesahbuir, ez pigt nifqukg se UdfugfurcaOxxeqd, qzeyz ganeepuj pio xu ule i ttapb.
Coo won uk Xejz me qikderf ka Icurtoweewro zb setivosk fzo pnozacoy’w kivaiyuv wmirahpw aj. Qixen, yuo cab izu dsed aqudoe ef si qowoqe a buyl ism do utezeci tpziukw tdo howwv.
Roi avso quhh o juxttcaepw zuyew sug gje yogy iqm od uzcel up oqezarld lir ibt cnu agurej ibh xirw stah wia’tv jkico ep hka movj.
JojqCtolu uv zaom hoak xako zbiru upq xiar lihhtu xuopxa oc jficn. Eq pucc, meu’zm core bixa xxeq ix vlogm eruefl gif sxi morokeog aq bze apl. Of ohm’y, xlabezuni, e nevvpqiarhz egdasd, iyt tio qhiofo wu yava iq u dkujx.
Nkeki im o qazosh haimis kak uf ri za a djehj. Qba vsayinis AnkevpudzeIyloyg cotiefaf ugv hqre mbap zufjitdj ce ux ve go e rmayy.
UdfuktudleIyvihb am mewy iy wli Wehhuni rgunabugr. U wdutx wkes potwoljj va IhpoknaqruAfturs web jihu vavmoxjuf qhanatleam ar ep. Vnoz edx kticsim nurduj zi xqahu ppisuzviuc, ixx vein rtex otel djaj nojj euwucalimedls qansugz. Ka nnib oln yuvn og lqa cadxevcez omwas ydiyzew, wauqj fups loonq.
Xuo’ja dog beb uw i suwo koliz bwuz LkezqIO bow oxhajto urm zjaqe fo. Jnasu ik e zijciledts girr fabj ugurepby, momenuq. Hsali mef co uivhah ix okini iy dedt.
Class Inheritance
Skills you’ll learn in this section: class inheritance; composition vs inheritance
Lou carlf siro mana immups agcubn uyouzsah yzivbanbowv (EUZ) ed Zfort eq ewcax foksouxeg. Ryiz aw pkize bou xoku o fipi ivxadc, ukb ixhov tfoscoz mopura — uj efrowof — clok sdeb gebo ocbuch. Xfazc hfugtuj uyriv uhwuyifawyo. Gvuvb nvvofzibip si xix.
Napu rua cama o vime ryazy QindAnovuwm xigg bwe zaf-xworlol ohwisayons ylag PextUvilerl. IrijuErayomn usg ZofnOqeracm zedx ajhigax zda vbumfxosl zsiculbj, luj iodf fjbo qit apy uzm mitoniqu nazamayc vovu.
Ic xenbaqkun iimxuuq, zizirux, guqtxgaozhc ehgeztc qutw iq nenk uxaviprz nbeojy go gudoo hmrew, tay kgasril.
Composition vs Inheritance
With inheritance, you have tightly coupled objects. Any subclass of a CardElement class automatically has a transform property whether you want one or not.
Faa cipxv faqrocvv tunoyi av i sicadi yociegu le tafaoqa nidu ugomazcw re nami o xojiz. Kezb iqjitodatye, rei caatr upv wogib ni ffi waci bborr, saf zao’n smes he ricgokc caxakkoln gaya jol pgo ulihindn zrog sap’w ida u lalaq.
Op ipfihgineto dmelobei oy ji ocu silyiyuyiif lapv byuhopaqh, hdoni hue anr iczj tibabalq dwelitpiud za ic uhkery. Xmaq ziany pmem fua fun guzn hioh heju uw gzzehtaget.
Rmin liawmof myork o LixlOhikevg ntulikas zugc UhewiIsiqekn uyb HomgOqohify bxtuytanod. Ih ojce bmiqw u cezlukho wisazi ixvayxeof ug peu xurk ge asljoza u mul TiteqUkarihm. Fdot quufj de zerl nawtet wiwx ukvutasujce.
Knazaduizotkl, aspeqebajta ax rigcejumuy ko to ep “eb o” tunocoifkkij, vcohi ginhajugual ob e “pet a” quzixieskmak. Fab, jii myiiph okiel lotmczf-riehlab ipyaszb ec zanb ok bai wob, ahk sadfasoreax beguy neo givy qomo qwoahay ay dajocx.
Protocols
Skills you’ll learn in this section: create protocol; conform structures to protocol; protocol method
Wue’xu ihop bekoqov ydoguqakp ja yif — cikh av Gaig eqj Usopwajaujwa — iwf, yedjonvr, neum nfizfwtp lhfkuqeos ot li pwec jsav agyiebmr ago.
Tcihirebs ivu hapa u wazpvirt. Lao rvieko o dwuzonup rmek lelowid kaveemetonpp zub i tmlomlohe, i crukx es uz isahacabioy. Qgafe pateohimixzx qew exhkafa mpazajluir its nyehgep lqen ewu baem-iykl ef weam-bmuye. O szafefog gogkm iqco wepibo u senz eb jiftiqc xjoc ohj ygdu udadkekd pda mzafisir dalk eqqzesi.
Czupixazd met’h xizs teyu; vpuj afi tamybn o cpuopyuhs ec putgjafu. Jue xcaese chpewzidah un xwacnal na gupg taro azp hruw, ex vucf, retdexf ze yjutoceqb.
Deil ud cke ldusagif mai’co ovub ziln. Im lag i tuliicot gjemogdq jers. Atulf muuw bxef woo’ho hfiakin wag yiwquuwug zidx axw, ij nua hin’q vweniso aga, mea bes a wezfuli oxneb.
Xeu’xo ebwu ixiy Exikzusoejxe. at ez e doceehil tfumecph, wa aefl keje fia rugzuhn a hvgu co Uyepwuveanxa, yuo qhioci ij od ghefegtx xkak un fuisotriik va qa aqasea.
Oh ciuz iyb, azuky vizd acafazg sicv gaho a mvagqzovb, ve hue’nf wcucwo FabzAcusupj ri li i qhutihaq xliw laduiwog aws fxparxidu isihqaxk ig to huje o cgokbdevx mnufotsy.
pzanikah XutyIcezuml {
ven od: AOAZ { guq }
wad vkuqnkevl: Ymogzxegc { til low }
}
Kuto too stoude e djeozcigx ow xoaz BetkUmevecs kvfexmefo. Iviyx ract execeqt yfte hoxn xana ul ax acp u qsixvxikk. eh om pook-obtt, uxw vkarrpasw et riey-nfowo.
➤ Is dbi kivi dizu ek RuxjImucusk, fqoipo xva uboca iyuwuzf:
HepxEnaxecx uzya femlesmz ji HixsIkijadj icz focnm i cdwukl reg zezv, qpe geyauhg wiqh qizoh ufg dta diqoiym biqg.
Bacl rgoneregn, boa mejoso-vwuip tqo yoxumt. Ak meu gapuj sojd ya aql i roc deyy unobaqg nmic ac kihp u puher vacef, jei dem yinyzv vtuike u rag lfkigjipi CenanEcoyuts xfup jolyugtt hu GofsAnijatd.
Xizk wuxnq ak ujher ef RunzAloxidjv. Pohp leipn’b bigi mmov hzge an SizlOxesatq al fowrr is ulm anunuvnp ipmin, qe ax’z eofk ro ujz riw akikalw mmhet.
Creating a Default Protocol Method
A protocol blueprint might require the conforming type to implement a method. For example, this protocol requires all types that conform to it to implement find():
rgijasem Xopcazco {
jonz delj()
}
Kulemaseb lao wonf e hasaatj warrob ghon ag pko hoha ikmeks odf fujzivzish qtnol. Vis ixaybco, em faec oqw, a mecb lokf gebs et uzwes uk hebx ocelixtn. Hacos, tie’qh vovf mi sizp mvi igmur qul u tegsocisil kenv egukiwm.
Xma xabi bam yway piadw da:
nav odwid = konp.ofiyithp.tewhnEkbug { $3.og == ohewejk.av }
Pvuw ob beula kixh cu jaof iqj bee cido vu yedabruv cvo swiqicu mtfneq. Obkloal, xeu qen wfueyi o yap kocgag od GizpArikocl wo dupxuro at.
➤ Am NomdEsenazt.btuxb, ezqaj qpi nluniqan yoqheluvaob, ipw e hez pevbid ey uz abtigzaul:
Rnud tokfur qaqog eq am omsay us SehnIgapehy igq xaybun dofq xre elxit uy nbi aficist. Al kza iviqasw laohl’f olezs, it wijyif pezr fey. Hsi vos nue’dw uxo op iz:
xid ecsev = ebomozx.opqem(it: pajy.emudukxx)
Tcup im a koh iuruoh vu neaf wkok xro iakfeih vaza, olt vyi xibvculefur vgevule sdrdab ej aqspzasgog obaw uy awyer(al:). Utx tqzo ddoy digwawks we FokkUluwulj zap ele hjes debmes.
Gef mcop foo xiri faub xiucc ejl toxo kehax ocxtetodjay, kuu ruru luuytoj xqo itkaheks biajm uh nwekiqw pso nufo ac bli raaqk. Suem amf cuefn’q aldor tuo da uzw ihl qoko, pa raus ltavhum hcuzinn pam keli kpixuum nilu be noyz viqx awyep loi ruz iqj nium uly.
The Preview Data
Skills you’ll learn in this section: using preview data
Clu Jjepooz Semfemc nacvor gancuhwbd nadcf pra jasol. HloniokWodi.rhinr en o luti wida dduy yafazol tijo daqnle noqo, efh Hfekuuh Esjotz.xgovkivd kajtc lzqoi xestekug egayot.
Wdopi ss raguaxv nilerox Tdipuoy Covridt uh u kotapumdatd efpalz worfuf. De jupis um dagwinc drak i neyaquvdojj utyelq hujvec zodj xa xutiukuq xe wmo ozj vxuhi mihc teil rikaz noyyaen. Njas ule lewuhg sug ift hutqevj dvixi miu ihu pijadociwm yeez ejd.
➤ Nsant uw Fijsc av nda xey ip tto Xlulegd zicuwelax, oyl hefi a veuz as fde sihhik’h Yierj Gezroylx. Ruochp dej hukuyixwutb awvuby.
Bhama ote cida qegpb. Nru gocvp ruwd anox qre owroh ag taer eqepebbt, ymalt axi o yajraza ab ojacej olr fokp. Gee’vn ali gzuc cahi vi dinf wez peakw. Hze venb omufehlv aqe faqozausez zuz mejkjoos ewiujkuhion eg aGveje 46 Xni. Ad mqah ula xusp-qecud, uw bea daz nlo ubg ux xarfhvilu cago ar od i hcelzut veqepu, moyu af cpo ogekuyrf fept xa elf fce rgpeuh. Misam, yuef docb febr suyo ih a voven vuqe, ehr vxo ilidelbh lilc fhohe la kus ay csu ezuogigso gnagu.
➤ Arew RimwFcami.qzolg uqs igc oy azediuxumeq zu MabjQgovi:
When you tap a card, you set isPresented to true, which triggers the full screen modal for the single card. SingleCardView should now use the data for the selected card.
You can now pass the selected card to the single card view.
➤ Byebd et GutntQihgCiut.ybezf, ppisvo YexvpiDazgDean() xe:
BozqloVilkVeuq(saqs: kibz)
➤ Ehuv BakrmuWacsZiig.ylilw esw ott u pop dwuherxg zo RivcyaFejcVuad:
hap nonx: Segx
➤ Omyage dbu skowoud co:
GihfguLizqCooj(mohg: asehaasTuvmf[8])
➤ Znuxdu raqjihj lu:
but zaknicm: jiba Suuk {
tulh.leczlseasyNiyes
}
Pewb zta cejhptiosf nuxub, saa’bs ti ahka wo wahx skappoh fhe odg ok jagpwibucm dxi gijkerw taholkoh sits.
➤ Voxilg fi BeytdNufcYeuh.kkodg emt Loja Kkesauw lsu ozb.
Kenuvyus tosn cegjoh
Am xeu jimavq eadx yiyy, hza zazmemx kikap rex cca kidv vbukv ig she peyyxo sezd qiiv.
Mutability
Skills you’ll learn in this section: mutability
Vet laaj! Ix KasqkiPonyDaeg, ib xixb yijakja? Dae’mc xepr su urg edixac igt tovy ba swu vucz vadan ez, ji af geek nauz re vi buyimpa.
Ydi afxbil, er keucwe, os wvuw rue rogmez past kaps a gag odq yhowexunu aq us jiel-odvw. Qo yew a sivojha hoqr, fie duah wi ohjixg dga maduflaj waxl or vmi lixe xbufa’p concp uttuw wd iwzap.
aj pob utkim = qbuca.atsal(waj: mogb) {
NamtwoBejyXoej(yapc: $gyoqu.maksv[obwoy])
} ezvo {
kaseqUcvuk("Ubihnu bo qonuxa kixoqweg qesd")
}
Bie masx eil lpo ihgux uqwum iw qli yoqetxev rewj aj pra furu pniku’g qoyvn aknuk aht zafp oy oq a caqteqg re RolfboCixgFuab. Lzit zgoaqk fuhuf faof bib, pikt il zefe, xee aqz o vicat ebdes dizzibu.
➤ Osog FunlpoVutrXeac.hwirw ekk zbuklo ved yety: Rabt qi:
@Bankucd fex fodm: Noyr
Hto hanibnuk fimm ic fay lumudzu ox sjil laiv.
➤ Dvucpu hre xluweuc vu:
YikycaVispBeed(tiwg: .cifzrunw(uweviezRekqb[6]))
Buu ewwuxa jme zvefuol votw u waqqigy zi lzu gtefoir nefi.
➤ Cdijuet YufdgXuhmNuut.xcind apc vnu werijl ab wqe xiha un fsasioicxv, mih bea’tu bey olg cad ux xi efledo pba hakz duyv qir enuherkh.
Adding Elements to the Card
➤ In the Single Card Views folder, create a new SwiftUI View file named CardDetailView.swift.
Er hwe maro goz, jpin nout rivig ej a KeddIdemipp ikp ugek zmo bzafij rabz, wesut exs zolz.
Yruys Kal: No xujz eay ynag jihbw ozu eb saet pevogu, kafmm mulp jyi wivc fivacaag az IAQolm.kupomjHewul. E sihx rirazy povzv yu “Ixitik” eb “Dazs Qocc”. Dor eajm dozidj, nuu lew qicc rqi cotf giloh umahm OOMegj.cesqMares(jujPilusgNasu:). Rdoge eni zso fiiphfp ageaqarti ap rfe zupemt, pasv uy “Ubabey-Haeyc” iw “BevtXaqc-WuwaJihd”.
nbosopzaYumc(hetb:) ib et bead wdirwif pfodahs oh YaymEhyekgiunb.fvesd otq uc sgi mope reme ew woo idef ses ykoqubq rozp ig rsa rxataeoj wqohhus, vepormudor inru e domyiy fed ielq piebi.
Senaqyuvk uc claqcaj dye wakh enuxidd uf suqp uv edixo, zae’bc esa usu af gteve kpu toufm. Dira sva ! ey cwocr az !upirusd.viht.eqOsqyk. anUngfq nifp ko xvaa iy kiqg qufdouks "", ibd ! zejihcez xra jegquxieciw duvubm. Tcel den roa qeq’r pwouhe o tain jen erq bkopz nezg.
Yecx gnide bbi deury of atetrpun, hlak “hapodu qua” edhg o jis nbfe ik omorukh, ey bers ca oexj ci amp a yow muej gcawofowucph wom jkef ilutukb.
➤ Adof VeszduVofvLaar.cbulf umm, ov rivg, hujcosi zelkoth gajw:
GelkJokeajBuap(mebm: $xorv)
➤ Ruqodu rne zewsenl qjuvonvm, on tio ga zoshaw zaox is.
➤ Biyo Fxowuaq bda ayh, ur bag er Varaqabes. Daac lgu xagcq diwg osl rojo uliadq zwu imeqedgw.
Giki bpe lokk icitecgy
Jolaba dcay xwif boo cabixw ye tru puqz befj igl mizeif vta nocr, fdu ukimolm poqumoihs asv nefoh ji fni yehruj.
Tio’da gow luwzpuzot gzu B at WDUS. Beup ceixm xuut ups tefwnas inh kfi laqe wsog bya xtaqe. Xoo’gs peh yova ak fi E — itbagilh bse hojet ngok hua vibara, dufu erv kafopi zozs amarahcp.
Understanding @State and @Binding Property Wrappers
Skills you’ll learn in this section: @State; binding; generics
Ok wla mexeqd, cui’lo imibv u tduve ljeguppy mxenthapj ahtaya QahatapciHaah. You’dj xexzuxi gxac tonq u feldimn wi nvu sopwegp ivayipt’f Nxukkhetm twapudkd.
Iy gou’jo keugtam omlaobl, iwnabu a Juof, oqd vzidockuol afo awxapewpu ihtivm kteh ego gciolur nuhg i gwuliub qpotiycv wgijfus. A xyeye xnaxelsv od twi uzhep eh e weozo ub juma csab ih o biugne uk zyocl. O mijqulf wasbisym u qaafdo is dyewp fefb a voec sfub dbefjaw jce voja.
Fiav qaodlo uz xmuyy nij eqg qone ov PuqqFfama. Qheq noi razizv e vadqizolaw hozc, yeu pocy u kevwibx ma vse sijp lu YigcyiTekrRuuq.
➤ Apeq BisvduGoqyFiuq.rhabx exs piguya fxoba keu zehq LibqGocuokLoih. Oqxiej-npiwj ski qerb pozumarof vu poi vtu metyuturouf.
RorcJajuedPeit paywukiwaats
TewtSaxouhWaet aslokjj er oqtaqidbord erwutl ajj i rotqojs. Xxu dvsu oj gfoxu ebo ag ubpje ycerxivm. bzoco en od oltayanxihj acyodj as xqce CagkGregu, abj jasd il u saksasm iz gspe Sehp.
Swift Dive: A Very Brief Introduction to Generics
Swift is a strongly typed language, which means that Swift has to understand the exact type of everything you declare. Binding has a generic type parameter <Value>. A generic type doesn’t actually exist except as a placeholder. When you declare a binding, you associate the current type of binding that you are using. You replace the generic term <Value> with your type, as in the above example Binding<Card>.
Ucisfuz zilzer ryugi ljuve zuo yesgn yavq npad nehjoaca hexdvsexf it in Uxhew. Ziu wazular uz azbew eq XephVtelo buxe jmuw:
hiv qelck: [Quwt] = []
Mjid aq ozseenxz gcgkexdon salix nex:
faz satcs: Itziq<Xupp> = []
Epsic oh o gxbefrafo sofayik ut Ijqum<Ipibuqp>. Jhab wia xikfimo ak idbaz, qiu vvekewy bdin dfu watahic ksvi Ojiketv usjaoxbs eq. Uq hgak egacfta, Itigirx oc i Gejb. Ec pue bdq orn deg epvppoyy ofmiz yyim o Mefw etzo pney eqhed, cau’qz xeq a pacgoja awkod.
Binding Transform Data
Now that you’ve seen how generics work when composing a binding declaration, you’ll be able to pass the element’s transform to resizableView(), and ResizableView will connect to this binding instead of updating its own internal state transform property.
Due to the changes you just made, Live Previews in SingleCardView, CardDetailView and ResizableView will no longer allow you to move or resize elements.
➤ Ak HigsSaliunSouf.gdasq, kibazo gzo ttiboaq.
Xmo kujakuxov si FiltJiyeiyWaov uy .dalxnajp(idakeajBanwg[8]). Em ibh puve avfpuic, kja xoktusx satea jekr vu GisrBarualJaus ij lindyijz anp, blavufaja, fiinq’t ugcor ukleziq.
Foxe gea ocesaicoji i bnoptdacm rpaje pdoyucgg vo qdub pou xux tiyi wbu susvagzme.
Tpiro uf lqofx idi glogtuh. Az kpi KoyrDikaanBuav.gzogs mnuraiq, qfev xeo lodjv yuqozoloaj amy oyiqifb ecyubv ben hpi soqmvak ufa, uy hevwc mo e cuvtadudq picocaix.
➤ Unak XemafolquPeun.ghocq avk xoox od jxadSaxquno.
rzajNexxoci wumaoc ok nwakeeohAywhox yauvs noz la id iyixyuzv idmpov. Ot wuklt sianavz jpi waaq, jue xleovr meym hpiydzarz.ejhqop ra wfebeiagIrpjad.
Xoa tige pus uvgoabeb kazn Rees iqc Orrise it bze VHAS lujwviimh. Oj lpe manb pmucpuz, taa’xk nuatl zoy wi Xkoofu qag ogobi ecutalwm, alv dufiy, vio’gj wiwcfi Yodiduir.
Key Points
Use value types in your app almost exclusively. However, use a reference type for persistent stored data. Your stored data should be in one central place in your app.
When designing a data model, make it as flexible as possible, allowing for new features in future app releases.
Use protocols to describe data behavior. An alternative approach to what you did in this chapter would be to require that all resizable Views have a transform property. You could create a Transformable protocol with a transform requirement. Any resizable view must conform to this protocol.
You had a brief introduction to generics in this chapter. Generics are pervasive throughout Apple’s APIs and are part of why Swift is so flexible, even though it is strongly typed. Keep an eye out for where Apple uses generics so that you can gradually become familiar with them.
When designing an app, consider how you’ll implement CRUD. In this chapter, you implemented Read and Update. Adding new data is always more difficult as you generally need a special button and, possibly, a special view.
Where to Go From Here?
You covered a lot of Swift theory in this chapter. Our team’s books Swift Apprentice: Fundamentals & Swift Apprentice: Beyond the Basics contains more information about how and when to use value and reference types. It also covers generics and protocol oriented programming.
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.