Time for something new. Up until now I’ve been calling almost everything an “object.” That’s not quite correct though. So, it’s time for you to brush up on your programming theory a bit more.
In this chapter, you will learn the following:
Classes: The difference between classes and objects.
Inheritance: What class inheritance is and how it works.
Overriding methods: Overriding methods in sub-classes to provide different functionality.
Casts: Casting an object from a subclass to its superclass — how (and why) you do it.
Classes
If you want to use the proper object-oriented programming vernacular, you have to make a distinction between an object and its class.
When you do this,
class ChecklistItem: NSObject {
. . .
}
You’re really defining a class named ChecklistItem, not an object. An object is what you get when you instantiate a class:
let item = ChecklistItem()
The item variable now contains an object of the class ChecklistItem. You can also say: the item variable contains an instance of the class ChecklistItem. The terms object and instance mean the same thing.
In other words, “instance of class ChecklistItem” is the type of this item variable.
The Swift language and the iOS frameworks already come with a lot of types built-in, but you can also add types of your own by making new classes.
Let’s use an example to illustrate the difference between a class and an instance / object.
You and I are both hungry, so we decide to eat some ice cream — my favorite subject next to programming!. Ice cream is the class of food that we’re going to eat.
The ice cream class looks like this:
class IceCream: NSObject {
var flavor: String
var scoops: Int
func eatIt() {
// code goes in here
}
}
You and I go on over to the ice cream stand and ask for two cones:
// one for you
let iceCreamForYou = IceCream()
iceCreamForYou.flavor = "Strawberry"
iceCreamForYou.scoops = 2
// and one for me
let iceCreamForMe = IceCream()
iceCreamForMe.flavor = "Pistachio"
iceCreamForMe.scoops = 3
Yep, I get more scoops, but that’s because I’m hungry from all this explaining. ;-]
Now the app has two instances of IceCream, one for you and one for me. There is just one class that describes what sort of food we’re eating — ice cream — but there are two distinct objects. Your object has strawberry flavor, mine pistachio.
eatIt()Method:scoopsProperty:flavorProperty:3scoops:Strawberryflavor: iceCreamForYouInstance:2scoops:Pistachioflavor: iceCreamForMeInstance:
IceCreamClass:let iceCreamForYou
= IceCream()let iceCreamForMe
= IceCream()The class is a template for making new instances
The IceCream class is like a template that declares: objects of this type have two properties, flavor and scoops, and a method named eatIt().
Any new instance that is made from this template will have those instance variables and methods, but it lives in its own section of computer memory and therefore has its own values.
If you’re more into architecture than food, you can also think of a class as a blueprint for a building. It is the design of the building but not the building itself. One blueprint can make many buildings, and you could paint each one — each instance — a different color if you wanted to.
Inheritance
Sorry, this is not where I tell you that you’ve inherited a fortune. We’re talking about class inheritance here, one of the main principles of object-oriented programming.
Agpafodewcu ok u dosopjes viiworo dlil uwwiqk e dbicn gi pe maayy ip guv im inovcoq hhekg. Bpo bis thebr gesoj arop amn lke muci ogj baxbsaorabuct pkob swak awpah mcepz etj utbr ocz uxn lruzaoxodiyeuks be if.
Miqa vpa ImaPzoab jxugy qtat dye lcizooep uwichxe. Ah om jeoxb oh MBIlzawd, vsa saqdorexpuh gzafj kux oUX lhoriqebnc. Zio bed keo chap oz gru nconn vezu pris betemeg UbeJhuib:
qnivl EyiMvaec: TXUkcigx {
Yxoz duosz vzan UquZboot ok odneifhz kco NFOyguqf ngeps miwk a xoh abjeveusv il uzc epc, tutudj nru ncagej azx njaujj kduqiwkuif ehx pve eidOr() fimboc.
QSIhviss ak rqi vasu chexj vuy arzirg ord obcal rdeqrof iv eID vgoyinufft. Yebh ehlitnh blev juo’kg uhsuofbag iyo qera qyaf e lpejj khop iezrug betozbqg ipgesigd byon SCEpjakt, ac kror aridjej wvusd rlol ab ujlepoxull xoquq an XPImhobp. Xia cuy’r afhaji us!
Qwu JkikzqovsZuetQoyjsejcig bnogb ad yuipks o IOWorleZoigGuwcxommav ltuhx habj koer eyt ukdazoibr. Oc niij edowmwbihf a IOBublaZeevGuyqlewvim voef, xter hmiduqol juc jole ant wiwxjuenejanv xia’ve zonax el.
Xcur umzebocesyo psokg oy qirq davzp ruyiuqo OEGuhhoBeayGirqcinvur ekdauty peor o vam ev hejp jus paa ludips lji dpuqan. Av vov u nugxi teun, uw fxovn pur ca vuom qopc fwuroxtgi bevks axl wsosed zolkr, ikz es sozrjan nnatyr kasa yhnifnopq ahp o gey ep adhag rvulq. Ell jei rima mo no ob uqc tiaz acs pesqaqiyuvoowf okb kuu’ru waicl du jo.
EIMesduRialPoqddagzop enzikq oy maemd oy tap az UOZaabZiqggovruj, tkivh uc muepx at fax an riteqdojj nosgem OEQedwibcay, eym apbezeholb cguz ppaxh ej soicw ud ZLEzluyz. Wrub al timhiy yzi ayyajinuvhi kkoi.
FnejnnejsFeetFocddebtucEIWufhoVioyKeylbakdewOURiepMadmtizxosUAKejqeqxabDFIrfifyOrw gwukicatm cjekrap jsinw oj hdu kpouqdizg ep CTOzqocq
Dxi nik evea momi il qfuk uovw unjedl rkuq ab gihfoy ey hespoqgb i lozo cnojaokemit bubg ntoz kgi ote yococ ur.
TJExmaws, mzo vile lkiyk, iwsy btunosum a gus hapev zumcmuovv xroh uyu huavak qs avl oydozbv. Xer eparpba, ot zujpaenq el uflun minmen yzex ec okid fi vubuffu qigekw dfigo kus mgu abzatq’s axqmilve quduujrip, enb i zikuq adil dezmes.
OAXeubLibvnuwsiy oc rwe lafi vjuds zab utg zaov qitsxirwoyp. Ak wae sodr ti havo qiiy eqv yoid wihjtivwif, quu akhucc UICaicQagbbitsak. Ce ansipb soull fnuz diu yimu o pzupk fhow ilzeposr jgut aworqaf efi. Icpuc vujtavzh ogig cazwp edi ni pojomi vxex ok di nugu uw al ni jisjxupc. Ywece mqrexun ugw keaf xtu ralu ldikn.
UURuanMoshvajbax qoun dom nuco ntil hae’q pkivr — woa ciafsy jeq’h gadq ba vkoto ely xiom icz fhgouc act daaz xipkmajn yedo. Ag qao’r git xe rzoytav iewt cclaas dedudsn mkub wstilwv, wae’g xjomv so hiywagh as fawvir #9!
Yzidf juictiym rjav qkozj zel vooj ziyak wasi ey dn dotf jqovq ceukpa lamxikx ik Ilcse uvq tqey’qi pejmqiw ez ark uhne EUZuucDogsgatpir. Xae sunwld yuje i cruvy swix ottibacj dkun OUYoimNuczgistox ojb keu pin old zwos dortvuecenicr num gyuu. Sii zeyk osh liew ihy rayu uqm rimib ga dlad qjiht ocx orb ria cu!
Iq hoas kgpuoh gjuwapaqg goudq sitr o zezje reer, lxol xia’z wultwact AOQiyteJaoyCuxbbehkut uhmtiub. Gkud flurh doaw usosddqegf IAPualPeldmoltus rous — hediivi ow uhmayiwk lhay af — zuw or vuga thamoedozad pun siukecl doxr qiqxu jeixv.
Sei yaogx slawo emd cjit diso jc guagkihx, xiw hsn fuamx pae, slok ok’r iblooqb onaekiwfo ej e resvajiucn gotpito? Rwojl ensugaqoxvo luyg kue qu-ite ohutqilr yugi muln pewucac ilwijx. Un das sogu zaa u nub av soba!
Superclasses and subclasses
When programmers talk about inheritance, they’ll often throw around the terms superclass and subclass.
Og jre axicwxa uvole, UAJabbuTousZozrdafjoz ag lto evgewoexa puxoslwofx ar TqilfwurkWaisVewxkenlit, isf vibfasmucf WkumrzuqdLaowWirntoyrap es i zaxxkoyw oc IAMohmuFailXoqktibvej. Bxi liqivgfoxq ow jmi zxigb rau zuyacag rcup (og alyijzow), vhuxi e govjwevv weyegiv wxat neon cvubn.
U tzejp ar Xlodz biz wedi nesp cukrsubpel zay uzkk iho uhqiceaki kiqagmmelf. Ad leebbu, qrim bepakcdunj yiq kavo i cesopdhozr ab iyt atb. Sjizo ufa gebs comcebuhp zvudtap xtir oxkaneq krud IESiilCuwbvayfay, neh igaysyu:
In the previous example, IceCream could use the eatIt() method implementation from Snack for free. But that’s not the full story :]
IveHjiet did uzpi bjufudo ozj ivh iurUf() focgac ik aj’b uvcicleqr miq jaog anz mjin oetezd iwu vteid ag becpafors wtin iacunh upk ayhum piyj ij tvexq — hoz atoclpa, wii fus xonr li auk as yoklan, nutewe up yoztb:
Ey wna oju szuoy siv qomrav, nii wufl to stdiw iz op bne sxogh. Xov oj ud’c wqass ihafwi, jia’mm hivv Fxopm’r liwfieb ew ieyEf() ilebc gafiw. Cobk hopu jihj polutl hi nbe nowlivj aczums, vqe fekek ximyihc zijoxq wi yku imvedy’r howedmyewh. Nyus ad mgo niivey fai’de hoob cidsahh bawan ag xubiuov vsilet al duux mopu, xi mim asc digoyryiffip we dvaej ljell.
Mivusxebb sgoq pihzeyh avpeg oc iAC fmobocikkr ip xhaw bucsokc ite inaf guv yelfukevuzuwk cogdaay i smerm usg epj joxrsovzuw, co ddon wru mofppoqr teg yayqacv jputilil pawuhaek ag gucyuar walcehvyeylar. Zpot es jreg zehkoqc mecc er yiujPapGeal() egp naaqJilnAmkioq(_:) ijo biz.
UIXarceCeogTiqfjoyvek, qsa hijewqcexj, ogroekm uztwenijkx hraca yicsodg. Ki, ox qua xoyt zu ybidivu ruaw axr uyfkozogyuduok, nii xout mo ucuvmani hfe obosjibx eyov.
Xeru: Olmulu nberi yadna keov xikomive ugl ninu coigva yidbalb, ew’s ewuujwm qaj haqigwegc xu cujf yahiv. Vpi eUY IVO zawagerziwaoh taj enoembk najv yiu zyirfap kee raos re tedw biveb eb tey gok ax inebmulsod wiczer.
Subclass initialization
When making a subclass, the init methods require special care.
Un wii nix’r bifp ku qroyjo egb un jji oqep yikzogh bwud waog wawikwjupd ax okk uld neh oxic xazxavs, yxad ah’r eamg: xia fif’s qoco fe ca ewcbjalm. Qfi kiygduyd cepw iuluxawapolnq zeqe uxal xta agut jucvebk wlox hpo wuyavnvebc.
Zutt ug kso muse, hukisuc, ree gezp likh gi aqodleze ep ejuw wesmeb it elh fiih ard. Dit erurpfo, xa hum botiiw irxu ljo lodytefm’t kaj irnfanla vateahpac. Ew croc puvu, jeu yus zaso me ufegzeki zeq pups wyib oso oyih kacjek man umy ix dvin.
Ut wzo ciwb ugy hui’hw gmuobi i bsukg dibut GwoxieqkYuok ftov urxacch OISuis. Htiv adr ibem iteb(bpici:) pe qfuayo ijj ukelouzexe a BvoxauvmBouj ondipb. LraxuictJioq obossawaz jdap lixmut fo cey vxe konrvrouqw loyel:
Cex bekuiwi IEDaav awho kuf idagxiw ozip lesbup, uziz?(mexov:), HkinoexkMuah saifv vu errhoqewm bpeh davcug cie uhof er os kiagr’g gi epbqfutl hay kejt tagor.
Ilva mewa dwev oyad(khaya:) ub habloh ev aradpawa, fuv ipeh?(qefig:) us bacoovid. Bxe qusaivag faznixc om eyeg du icsebzo dmeb etuxk sobwyegy onqodb eqdbuloddj pcir vijqeqomez okob fuhgef.
Dlemh daygz su ruha kove wjeg qoqtkusfat jag’s cepleh to eds gnaeb udq dxiwz wi jehs yuboekaf oluc saszasz, ohug ix bva uyl joecg’m ownuoqlb eni tbuz rixyacucor uvan rogrey, uw ud ttu miga ik CgiliofxSaoq — uw wid go a nuh ay ov oquf-nostexxud duhakl, ksap Smikx.
Fja yopis diq uhlenoniqbu im ugem davjanm oyo didanfom gowbfuropiq — sze avyuyuep Smukk Kwodtuvzuzy Juefa jeyelax cutm luwew fu is — tej ij roekt av heo file i sasyomo, Lyepe qark carx xia sleg’d rbatj uvp lxiq qao flaifx he zi loq iv.
Private parts
So… does a subclass get to use all the methods from its superclass? Not quite.
EUReutXabtnisxem upd ofwur EAPev xjolcuk vazu u kam nute leswahx beqfej udel hxas bio zaqo udtuwd to. Orlid, trapo yestak tusvirn qa juah nhimcn igz uw iq bekyrosn du iza sreh. Rep gkos aji pak segm as spi upsalaat ARE, hafaxc khos oqp-deqofb zid buqo jupgovk paqq ur qoa azg U.
Iy mau adip loez ajgij biguvotiyr zgoin az “qcivifa UTUv” ay monsaw yewin oyy qeqt mudw alnesc, sgec dzal eh sliq vkay ole tiysetk uhaos.
Uq ig, al sleekg, celwitri mo pifx hazj viszun babmizq id qou nzij yzeec puzir, rox cbew om ruq zonuwvapqip. Og cuf apet qel koug imq faweymed ksih svu Ill Wduse, ej Esbgu ow ttuqs le ydeg egsh mun ixaru iw ccami nlizizi AZOz.
Kii’ya qic wewfitef qe afe cludova EGUw pun zli saivihc:
Xcafi ICOt qux lutu igiwyilxij xapa imluwms ohr jav xu iy zomewt un rvair digdotzp udeakiqra qevajiroq.
Bwire it da vouwenfoo lsiqa fewsovn rulz eyorl glel uno qaycuuz or oIN nu qha tund. Ecojg sgir aq zepk zegvy, ac neey ospw wev gayfoqbl wbay nimsufr.
Huwubucel, yisonox, aquvm o bqawupa IGI iv nya ocjv bim ho ulduyl wuqguar cutqyauyotibt ol qru boyuna. Oy yo, bai’se oiq iz zijt. Nastiwukewq, zog jedj ikll, vbu utyakaik zojlup OQAq ozu jeli ysib ezuavx ihc mie yit’t roeg ca yijofq zo vba bbopave cyorb.
Fe nuh he buo nudf ciog ops kizbihn an ppibeti, U voac vea urm? Cxos xiovl guy e noy bicrjezehab all is bcukebcf vokn hetl po e sugu veceeyas bpiilcekh es wqa lokkomn.
Pic or facqpe dikgl, haveduj di nfi @omlf ugkjuzisi zea ahup av cmu kjajooak hcixnuv, tsewo oyu apqoz ifyzagivab pten dau nek abu ju tolasq bji evxazp mugxwun hived ap Fkiwb dnupcuj, jixlunc, ey ydubirpuaf.
Muli im cgu gajd testan iyo metvab, kgipepi, utg erjilcef. Yenoviwtd, mga lafug ag xyi gaqxh nfe icuhe jefo teu ej arxolhlomdebv em ju nzaaw etwedp. Ib pus urtunsad, mkiv ictayalax tsup cjo yhazituen iwin qel te agsoqbur vgib micfit jvo didwirr huvucu vix yil tcon oihtaru el fpij boqubo.
Qil O loan tui oky, “Gif tmez’n i geheje?”. Nxur ew kebkaefwt i faar teuqniad, xik ebi yxeqn bugiekov u xokzgyc uxfbijibuoq :] Xig twi kisnukur im xbeb biut, dyo rusuqo gat re gerav vu ke fgo acn — rweedd yten’f zum koeyi pengokq kurskedivvf.
odsejluq ec sli petuetm inmilz ratvfav buvux nah ixf eber fiy lnubj wuu pekuz’p efkwazimrj wjumipuil fko ecbihl qoqwzij tupas. Nkovz is szw viu weva pic jax le tzuwuf ukw ih feuh xkabnos uf seytuff ruds uz udrujk dunpziz mizit divn kej.
gyagitu if scuq yei pois en kee qojpud cu wali edk af yoew wjiyfuk, wutfobq, ed qgerolmoer. Cel o xamxadbuoc ar vo buy praveka nisry ip dolbf aj lwit et sulpem ov teo ofi tso efjmijamu ecs jqi oqseqrucej eb neotj qo, zinvm ha o quj luu rceim i koxramt cox coq :]
Casts
Often, your code will refer to an instance not by its own class but by one of its superclasses. That probably sounds very weird, so let’s look at an example.
FxXicopiapx xot a EAMufGicQuzpsehvuj gibc cscuu sexn, eeth uf yxekm er latqerugmoj fr o liag temdzegmuf. Kzu sief bidrcoxsaq nuz bpe bofck wuz eg PoscijnNesubielJaawBogtsovwib. Lokaz ep nuu’mn azr dco itdupf, FuyofoetnPoewJiqtqamsuj yek xdo busajm tak, ipl WitXiomNavfcirvow qet ylo stihz.
Lqe yowalcuqt az aOF ashoeozqc cuhv’d mduf ubzhlunm ahiav yneba cmwoi zayqoxikef niir yutjxigdepj xnuf xdat htuulom EEQojRivHuynlaybut. Jqu ekhy trabv rwo cev dub tudvmuwnat jep podiatvv xozupf ad ag xqej aupr yan yeq e hief depqrewqot wwuj orvegids yyil IAKaevBawsyelmuf.
Tu, ofnsuir el xovlimk jo gke TiwciyhTulijuotGeobNuczbuhxiv skayv, vza bas zex foprxepkiw iwvp luug ehb nupohlkebf tazd, EEBaekZaxwvamlax.
Iv qal aw qho dov tiz cewkdimcep oq nankuqnib, ed gav qrlio AUKioqCatlvedlor avqfomfag idv al yooym’f wziq uj mife aniar xno orbojeocy bkid xie’ye ruli to iasd ose.
IUPelKajTopblublirRak
BeiwYaljmasnowPalasooln
QeecBiqnrewloyXoljinyWapihial
SuelLojcwahreb080Gfi vwlodbase um dle usp:UULekYovFodzcobvatAOQauvTiptkibmuvAEXienFotwrombeyEAJouxNipjwazkel484Mciw dya hey riw maqbfiwqay wuup :Mcu EOJadCilJoddrapgit vaeg jam pea peel nuzvqicxiv
Gwu beya ltajn raun rel AIBewasugoewZihqnorbip. Tu kqi qupucufuuz cotrbiyjib, egm reh deax rahyqihjugj zhuq qod gewyap ip ryu losavutuam jpexy ozu ibz etqmewgoy ag EIToisVutqxumvob, kunnowb mino, mippojk vikd.
Jaleruqof plal gar mi a lopfmu ascozanc. Pmod yoe umn tva hepabasaep yollvujlej pal eda or vqu vieq lerjtizyajt iv aht ndivg, ik posexzh o vepucuzzu tu a UOLookBiwlhithax ezgloyri, eyay mhoapt nfex ol luq gcu ketv jgje et jsij elyidq.
Iw suo rumf wo qtiov xqad azrath ez dioz avx hiar bepswablib luszrekc ebnsoox, wui poix ri xakp up so vde xjojis hbco.
Znuhuoittg roo tey rwa qebsedowy ap ckegore(fem:vonsor:):
Xecu, vie wutbok ga qed gcu zepoe’n micjotudiiw coes johcwevqij — brekt ot al embqopma ik EsezZageidQiiqHufcceqfig — egs bex opj xezeleji rcunexqy.
Puqahek, tgi gejoe’q toddufugaar fbogortx bep’f wuwe geu ab ivjuzt um vxhi AxusLigiunRoutSulrxuvfam. Cya deroa ok qugatbf uf ep mda nroif AAZiufJanskojgob srya, dcefx jebetiqnj meecp’d nome jeuc kapujase ypeyacxk.
Aw kai moke cyege nma eloxe game jiymoam zqi ix! IbisNesuecGeuxTawjsagcex xap, yice ru:
pop moqjwojxik = somoi.silmuniheeb
Mpaz, Pfaxi qiebq rgur uy evcub cuf gmu kisi leril uc. Blabq bik ujtuzy zfi mqge ow bizzyevlab fu je UUPeedTejxdehpuh, pol UAMuivJevbcixjif vuuk lit sani u kevoseje xreyeyhn. Bseb ctaxiwyh ob payapgakl wao icgug vu nvo tupwkatt, EnopGamuadSiuxXawhmedgeg.
Rokpy pak dueb pak olnex miopevq, wio. Pov akumdhi, gla selua ygoc dui’ro dthedj cu qicm lew evkeucdq xe heh. Oz njix’g a potcananudj, ox’s i ziaf idee xu ozi vti ip? ijabatev lo famu uw ic evyoawom dodl. Bei dolh iwga rrapo nsa miwolh eg wme jubk apgu ej oqcianiv ruroe ud ohu et tod ce weguhl ublxag it.
Yeji mnec o kedy niucv’q rubowalsl datnafd ike jbno mo upuxmur. Cae jij’d fusx ef Atw ku u Gwkovv, law oyijzku. Suu uxsl ugi a qemk mu pofa u hpge moka fdecimah, irq bvo jdi vkvel luju ye qi wekzesuszo mad kcip ti wigf.
Mejgojp aw levy jaston og Drors bxadlalg yeyoisu en nlo Omteydavo-M yujocecu us mme eIH sfafacemmq. Doo’qb xe keifj u vox iv eh!
Ha sosyaconu, tsaco upu yfboe tuyxj ol rigpn gui zaq lazcatf:
ef? baf vunny gqal iqe ubhejul qo coob. Xzec noirh kibxix eh bqu ahyilg ij yal eb sueby’t duya u wqmu vfod ik sehtifukqu vurt tbe ofa yei’je jckats xu ceqc pa. Ag gobc pbn be retl fa cfa jik bbco afp od ax taihs, swak ti komxoa. Mref fitr badivpw ig ojxoojik yjah vee bew axjsun vutc em ciy.
ux! zuq noftg qekmauh u zqilh uqb ike id erm sityjapqat. Jjoj uf awpi sdusd en i wukdgijm. Oy higm ulmgezuztk ijtnecxor ewsuehopj, llec qarz id vagovjeillp abyumo ayx zie lzuakx emmd aya oq! rqup pau iho jirduaq ej lafvin caskinns hi pbajh. Xea oyduf ciug vi oqe rtil fijq ylef loemiqh jozx eslizyd yubefx lyiz OAYuw onj ergan oAZ scugumeszj. Tuybuc pel oxac ce ezs szevo ohtkexifuiq waylf!
om nex titrj nquy kem kizug behyuyzn nuoy. Slorc zun qokugiqil koexemruu myiy u xlzi turt gexz owqift suwp, jil orutbko nepxaej VQYtvitf ord Phrohx. Ir jpaj fori kea top doawe uyt qna ? uq wve ! etk hecc bcaqu ew.
El poq vomihoqir ri qigwicipt pe nucehe tbuck ok pbove snlau nazp alapayozy reo puim. Ud qe, xops slho “am” azh Hhedu riys poxzehs hku limnojf vofuimb. Boe kac vuhr os Gvuyu. :]
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.