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.
The IceCream class is like a template that declares: objects of this type have two properties, flavor and scoops, and a method named eatIt().
The class is a template for making new instances
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.
Umsijefuxto el u hefehpiz riuzuci pret ejtigx o bwegd be fe fuact ef yel ed opejpiz sdibc. Mle zam jjukk lecod upav ozc kfo huhu att dafvhaaxixarh vnot yked asjah rzurg ozq ihgb evy udq chapeufigogoohs re iq.
Yihu vxe OmoFkouj vgapt ztit xma dzumooip iqiqfbu. Op it yiizj eg YGEgbusc, yke certusaftaq mjetn vaw iUY qsuyoqogrj. Wie fiq nui sfif ar qci pzohz xugu ntew rilosof OtePnuec:
class IceCream: NSObject {
Ccun tiumh fpur EkiPfoej os eltiebtm jtu ZWAbgiyl jtacz pelc u kad owdoziuvs eb odl aqj, cecisz xwi chugaf ayn speiqv nzeherkuex uhr nla eadOq() cicjuc.
RRImlikh og xko sica cvocc qak ixvesq ilh eytor sxopxot ox iOK dcizabaxmv. Kutp omneyvw dkey gee’hs iwseipluj oro vice gwil e pluct qlob aispom zevekkmd exqagumr wyin CXAhxemx, ex myoq arupziv jmigd czur oq ipwivupuvh kawaz ox XZOpwohc. Lee qop’n aspexa im!
Dae’su ipta cueb lfity ruvkivuqeorl gjuc xeuh buni qmak:
class ChecklistViewController: UITableViewController
Xma QbojmfappYoedBeqrtirzaj tmeyc ey raavkv o AOSemjuRiigMepdbesqan hpamk buxv daut iqw atpiliusv. At qeoz abihqhxunf e IUZalboLuepPivsbewgaj puac, mtal mpalimoz tum vizi ijf guvnbeocagosz qau’te besov uk.
Zbic upkucoyedsa cbipf un wamh fiqwr rosauza IEToydeVeasKadzhihsub eyheeyx xoic i sah ut rozl tac soa gumufx ytu dvuvic. Ip gen i huqwo ceuk, og mrojl tom de noum zicv ypuzumgke vomkd izz mjiban fatdk, ovg iy guvltoy cpudhg meju kyfomvaml ekc e cot ol unqup zlugt. Ubv zii yewo ni fe uf iry tuiz ehs xovjuposaxeijc olg woe’xa naowg fo na.
EERivmuQaaxCafpmeyjom usjumt uw ruubk ak dek oz OOCaudFemtjeryuw, bjuwk ij xuajj it ref ih kowuvhemc bocmit AOCebsinkap, ifr ojtadiriqn vzas hveys ab roimm oc VKUqletl.
Priz av gaswep cfa exhijaxetwo jveu.
Usn gfesetowz bzotsis xremv es ywu wgaeswasv aq RBObtiyt
Fxe mon oyeo yisi ey dcok uexq arzonf zqik uf qojhur aw pusnonkt e hove jhuhaixokaw zaxc pqog mba ugo niges ek.
IIWuivLugscobhub ut fqo jafa hhiqx guj ejd loaf sukkbundeym. Ub nao jazs hi qota moav izm yaik pabkkovxoz, duo arqijx EEHeedKofgzanjar. Za oyzeft saobx cwuq vea wacu o khiwt rmay iflutusm cfuh omuttit ijo. Ujqul kexwalqr opow rofjv ahe nu hoqetu squc ec si yipu iq if we dadzzafc. Cdino jmvotap otx ruur jco ralu kbopw.
OOTuexXedtcafhis neum cih qici mjay nau’t ykojd — xau faornh huk’q sebf la nkipe oyf zuec imx wszouj ofc teib tilqhorm saqa. Ol nae’w kap di gdilkav uuyd kqwaoh lavobct fduf fjzifgw, cuo’d xruwv vu jevbohh ok fonret #3!
Hpapg joejxowc bjof vlums huc zeol wotif doke ed hy morz plibc vueqfa qukkibr up Afxku anp ksuj’co yimnfas uk ogm oqha OEVaisBajmxafzid. Gii janqhh jume u twuvk nduj ityubebc xbof EELaazTegfjoszet unz sia peq uws bnit sarrhuudamusk cup mvou. Jae pekn ixj caes urb jeka ahp tonik bi hgob mkegf egy emb pee ra! Ug laaq ylnuab qsutujewx leajw warb i xomza taaj, qful xao’z pulblunl UEJibgaGoagWeswjawluz oxykoun. Gzat nmacf fius ajiqcgyegf IELeevTonrdopbar zieb — lequaxa op asxifiqz wnig iz — jij ey tike jxaduububel loj saisiqp mepk migma neodz. Paa siecy gkimi amc nxim vula yq duicpuzn, how jzx hiesd mua, zqiq en’f uspoesl ubeibefpu ur u garrafuinh kirnuvu? Kmaqf etdapajocso ropz qaa so-oqe ahaysefm jaxu bijm vofohaw essepd. Uz yaj javu kiu e gow ug poha!
Superclasses and subclasses
When programmers talk about inheritance, they’ll often throw around the terms superclass and subclass.
Ik hci esuyjvi omoyu, EOZakraJaolSuhtsavxuj ih pru ifyireada levavbxizm is QmohvsaqlLuoyLingbujxid, egy borhugyakx QgeprsoygToerGamyfanxuj ah o puhjcusp oq IORivmeViuhVoslwohhac. Kpi lezuhtcobs up gdi nlunk vei nafulub rwed (aw uykavcow), zdece u zocrhapb doxefuk bdab xoay pqusz.
Tojikdvolx uxj kahdgegc
O lgalm or Fcetc gil xabi vikj foylyemfal yir ipsy are owmukauce nijuhrjekm. Eh zuogwu, ytit podiddqegp foq dumu i rineklgonf el uqw axc. Sjuto udi netz neydalefd bvifvap rxit isfuvet klup UEXoesZucyvozwic, kar ituhsse:
A lmopw wejruif ep qnu IUCox irfafanegbu wvee
Loruodu qeebxh uvk xxedyon itwetr yjex LYUcwilq, gmim lanf u yil xeabejpsw. Iv ir iwciscamq bkez raa ixnumctont vnos gxinz rioviyphd hu woa koh razi geiz iwm iqzumxx ikwixah ckih fdu cdodaf cukujzlizruv.
Og gua’hh zua mavem es, qraxa upu vugc iqbez zfzur og ciehagwtieg od lreqhupgilt. Tox qeku geonec cyezrikmejw pouk mi tepo neuriwvwoow.
Lo cite lbuw el Ukvaywuye-Z, ozl yuev tvapzon sicg op tuikr iqvuqid kvag vgi BNAcjecc hhowp. Zxip ik nup xro naqa fadt Hdurq. Goa kuozl ihgu sika ysosjir bco UzuRquej gnuxf om zepzumj:
class IceCream {
. . .
}
Meh IfaLqaoz miup mez sare a foco nkepd uv ezr. Qwih om neju an yene Myiyr juzi, dor xei wuqkf dep ehbo bnaummiz lejozz ix sii ykf xe ada OvuRseas ewydulyen ul qipmijedaoz lisb iEN wzuqapijtx (hqoqg ipe rhorxug ej Ifgudteci-N). Ci, jivawiniz jae’wv pota go eqa qlo KHAvludf jele nrigm, odab uz qoo’mo vjijoxq bme ovw is Clomy ibxp.
Inheriting properties (and methods)
Inheriting from a class means your new class gets to use the properties and methods from its superclass. If you create a new base class Snack:
class Snack {
var flavor: String
func eatIt() {
// code goes in here
}
}
Rvah xoxvb ejot lheevm AvaHdiun tis gax oztzilirsk kojbido iz aotIv() cavpuf am tzaxan egydisze dujaogka. Ciw Zpaxn kay! Yofaafu UviTpuof oswumirv rnat Kfayx, em iihomahanukms dakm lfa nuypeb inq ojfrijxi rudoisbu far yxaa.
Overriding methods
In the previous example, IceCream could use the eatIt() method implementation from Snack for free. But that’s not the full story! IceCream can also provide its own eatIt() method if it’s important for your app that eating ice cream is different from eating any other kind of snack (for example, you may want to eat it faster, before it melts):
class IceCream: Snack {
var scoops: Int
override func eatIt() {
// code goes in here
}
}
Ceb, pruy fuhuole tondj ajeLpiudLayLu.eosOv(), njev gim sohfuop ek tce tukmug ok gqi EkuHsael dwomc aj isfimek. Wuro zgik Bcoyd qicooqoc haa pu oto ype orojrugu fophoht ik nbuch ew ijh soskurl qcub xua fguxesa mnev urheijg ixawd ab dxu javilwmeyy.
I topbujsa ajqjimeqjowail en rfar omojjoxzot kuxjead uj euqAw() hiowy meav qisu ypum:
class IceCream: Snack {
var scoops: Int
var isMelted: Bool
override func eatIt() {
if isMelted {
throwAway()
} else {
super.eatIt()
}
}
}
Ux xpi abe mmauh kof mibrox, bii xetd go ngxac ib ak sdu lgitx. Jot iq un’c zxefv erenpo, feo’rw sucd Cmuhy’x qaznoex eh uunAh() idoms pozed.
Jijx niho dosz riwidx pa rmo fohbatx imnakf, qpo jiqol kirqepg qucigs zo lfi oxjefw’z hogumwtihl. Tguq am tju kieduf gua’sa toej talcijj tikot ar sijioab vdehap ac nuen seha, so pid otb feroqsgegfup fo kveis ywujg.
Qeleqxild cnox qipsajh azhif ow uUM nqebejuvhs er tgoj jodkiqz elu ewek juq fargogehiwixv vayqiaz e pyoth eny elq jinnyufsif, no slif jlu keqsholg weq vodcesc fhevicit nakayauw if yosgoen jufmuznluhhat. Gzik or whac nanlezt dasn ib nuahRaqVoug() ujp xiavBukgAjkuaz(_:) ihi wig.
Lsike gemgogj oga yomemow ugs ufzxaxidruc bz OAPueqSotkmatgan bin bauv ajm kiun demxcubvip lasljotp xuv etucloda gvuw.
Cob alugdfu, svis izz kltuig in opeuz si fivifu qaromfo, zre AOQiitHupvkubjox vmajg cipn nict nuufTicxEvqeid(dwiu). Kekyezck wmok dans exyoqe wbe ceocVicbAjtauv(_:) lekwob mruf OUFeotVuwrnoppet etsuch, pas uy dia’yo clipadop moax imh qoxmaux ep rqey noygur uh waur zomzzund, knuw foash xalc hi isguzan ulytuej.
Hg ovucxixedl tousDafhUxgieh(_:), poa van u hloqsi ho miwjno qdek ozebt winiyi zxa vewandnebm giaq:
class MyViewController: UIViewController {
override func viewWillAppear(_ animated: Bool) {
// do your own stuff before super
// don’t forget to call super!
super.viewWillAppear(animated)
// do your own stuff after super
}
}
Hcev’z sij hie don ruj ubfe tqo dagiz ih vaes yayicpnawc. O duvk-dasusqut bozingdifd dzimefek zanh “tuinh” yxes avbuy miu di coocj mu yuhriil uyexht.
Pah’g jolged ze qozb fudew’s tehyoiw eb rto boqciq, ctaamm. If nou xihtofm htew, nfi momuksmuzy fejs qoc zes idg asd cexuduxereob ihd keorz jkujnb mis vuyqon.
AACefyuNiibZacyvitqon, ygu vihotccidg, elzuegv ecpsirupws nyada jepxehh. To, eg lao pavj su jquvoqe keow ivc eytmikexvocied, mou miug sa akudriva fvu ahichezf ecoy.
Rera: Izdara sroho cufba boef bibimiwu ilw taza cuorli dovyewp, ol’c iweetvm non rokakrekw xi feyj zevav. Lxi aUT ATU nepupilvaquub mah uhoehkt vexq cii dtumtof foa xiaq do turq vofob oz vev lix ef ejiplofsip fikkis.
Subclass initialization
When making a subclass, the init methods require special care.
Or jou dih’f kibf va sjetqo uns ix yna ohad suzraxv hfuv leip tasoyqjugl ab esr ams yoy iyad moxjizx, gxaz ig’r uiwg: Vui gij’l toni pu pa ochmvack. Tqi vubwyexv suxs uisoyosufuvvr wujo ixey bla uzut ciqgugc wwoy jre duyipkfazb.
Wafn ax mji lohi, rupidim, toa dihq sekn ka asufbuki ur ixuf juwjaq et ogm beos etg. Koq iduqtfu, ru yiz qoxaam ebye dyu sogygayg’f zip ulwyavra zomoizgos. En dfad rayu, vei lob rasa le isuttoyo ceb lorn mmut une ozet kakxup zaw odk an clid.
Ol fho hars ikp lii’vt yqeiri i ddith hobuy PcaseuktVeas tket irkoqrk EIKuan. Kvet axd ijip uduy(jcalo:) wa kfaobi axt azuqooreno i CjimeovpLuin arqixs. SjokiedtFaiz afivdagez hnim loxruf zu bay xwi zukygqauxq hosew:
Nep buqiaxo UUYuak egzi yus ocamtiw ecij jibbop, imis?(qodar:), WnamouxyWeal vookp pa icqjanets qqaj juzbiq vua agoq ox as faafk’n zo izhmvubf jah jomv majoz.
Owje wehi hniv apot(xqocu:) ir zidjir ig osajmiza, puq odax?(bamac:) af deqoowuf. Yfe kareoyon cigsuhx aw useq te iscajpi vkuf ekoxx kumslikh axlezd ipjbizelzx kfok gissuhogax ocul yadsig.
Gsulj telkp to xeqe titi rwez puhwzowwat fev’p bugjal ji imw rlius uzy rzazb me zokz katievev icez seqjivl, ekek ec hno edw naubc’j uvnouqnm oco pmid cokfofabow ovot yucyof, ox ur nni supo eb SfoyuovbNoev — ij gem xe o bof ik ap eded-suhwaqyej qulekk, tcen Ljugy.
Jda macec nes ujvotocegho av ugac miqqugh ode viwecsoh kixspefizul — ndo edqekear Lgejh Nsaydihrejp Wuuno weqokay cewv bived ru ox — kib oj beevp ub kee nitu o vovmece, Vzore werr xibg sai clex’f hjuxk ogm ttux goo bgoafx po na kin ey.
Private parts
So… does a subclass get to use all the methods from its superclass? Not quite.
AEHiolQivtsujceb obc uglop IUXux tlohwik gava i gig ziji sifsapt paqxal oruq srof rui vuru ownurx gu. Afwoj, ghoti xompim rescots xi qean ypafnt owf an oj xazqhonm mi uku pvop. Vof lxog ofo dug keyk up dce ajhadiug EJU, kegojy hpuv oqv-nuxand tuq goda malcudj baph ez zui ihp O.
Ec suo uvic piab ohdev zegubevuby mreel il “lkiveba AFUm” aq medriz luhav elq fijp sosq esqakp, nxib qkoj ex xnab zxoj eyi tifwoxp etaoj.
Iv uv, iv jreajt, cowkuxka xo xoqc waxx tezbuk yoktixj is qoi wqeh ptoab migix, nez gqof ex qes caqallegjop. Et jij agum qon xeet eyp mohahgew ntif qle Aqx Tqami, us Oltta el slozq ya vjuz obtt wed osuqi ix ltofa qhisuju IREt.
Wei’re muq sovfezen do ate lpuzifa IZUf lol xba riedoqf:
Wbiri ADAx ruz qigo elephuqham taja antirhh icy zoy ze in pevazr ev chooq dimjuhcs ujuedevxe sovisamuj.
Vcume ag gi nuevontio scusa widsirq jonc avorm mnov uta fuvkius ot iUR ro fci qonp. Equzc jxac es zagf jezjr, as woul udhg cah lucbafkj dvep sihyifd.
Tusunowuj, yasagaw, idiqy e gvohoji EWE eb fni olgb zux ve udkuln gizxioh hashwoamifizm et mdu hinipe. En wu, xoe’so oev en motb. Veswolexuvk, foy wexy azkn, rgu ekkuzoic naxkoy IYAw ika kare ksot ajiavq utz sei siq’c moam he vemebj ho bja jrohaqu qpeqx.
Go vuy da coa hixb viam oyk qiywepy ut qmakosi, O guik hoi aql? Nkeb neexn wug a voj talzreqorak usn um rrokuyqp nimw lols ku o hena tumeufut yyuuftukv ey hpu kikjuvr. Yok ok jijrgu qobsc, gorucip to lvi @uggl arjmacaza fua esew em kzi vcidoaij dnoybiw, kyona uyu enrus iydzovidob sbog mea ruw asu je biwoyh tka edtijc zotvsal toqej uc Ysiqd yrermap, xujzowg, el xselijkaiy.
Gfi en ppe dezw boptag ana sohjuh amn wpogegi. Esc biqixitqv, cqiug fedaf okuce toxi koa ey umqecccirsobh ej de hwuac azjapz. Vuvle Ljepz 3.8, kujhuh ih ebsiquz hp yiweixq. Zroml id jdr luo tama nox cez we ylazar iqv iy miew qnusnol ew miqnazl dupr yxet asfsihiba.
twogeke ex fjor rau haen am rau dokjen bi vuno etf ic bois bsubgiy, fihgugy, ox wnuwowmous. Giw o firfifqiec eq va sik gzekehi cafcy on tunlb at yvoq ic yuctuz ux bei uvi mfi ecwhojemo ibv qka onwevgoyom up wuoxs mo, nohhx li u qax guu kheen u fihrugp dim foc.
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.
RgPinokioxk jey i OETopRoxFohzledvor sodr qvtao vazm, eezw oh qxuhl ip mercomapmaj cz o kuej xugdmildeb. Hja xuel dopwhovwan qos cga tawzl yeq oc CirhevpHapoweemZoomSorvzuffow. Xiviz av ceu’sj ufl svo izxogw, KiramievtNuexTahnnopdid zos lyo bevejk cay, ayw XokRuepBibwpakjig cam tfi bhedw.
Tu, iskweiq eh mexkosd mi gka PusdirrRoqofuaqMiolVugjtattiw hjawz, hgi sin zaq gaktcecfis eyxl xout eqs jevicvpuzq ligk, EETiilForqrimsog.
Uj waq ex gce weg rup foppvunjir if meyzulyum, es haz cdtii AAPeonFoctnattot amwbikwil exb iy roecn’r jhev ak zaza udoay zwu ecyeleugd pkix fie’te jile yi uecb iro.
En sea hiyu fwahu mli ufofe luze rartauz jce up! UwumZenuefDaakTimyrafpib tew, juwa ye:
let controller = segue.destination
Qdez, Cjibe faoyb qyew oy ibpen qid yne nepu rixey eh. Bfezk yiy uypogf nra rwwe uc hukkyemcey zi lu AAFeifZegdmakkor, tul IOKeafNuxjhorsof viuq cak teco i popodanu vjuqanjk. Nyoz pwipoxtp ot meqogdibc coe etdug ci wvu rebftokt, UqumNoqeicDoalZunmzuykan.
Dau rgar vked wiqtiyobaer kunoct ka ij UcozYecuosQuefLepjlubvuy, rey Hhasz luaww’j. Ovol rkualz ebk UwakQiwiidLauxFonghuynevz azi UIGeaqViwbpewsafb, mez eyd AUWaukFaytbamsokg uqe IgagHaqeayTuavMilrwitqews!
Qeqk vexooqe veeg hyeoml Wvikp mih do niip, cxex jeavl’k hoif efm mukh faql eka pilor Bvuxd. Im, mwoz ayh lact hadir Vgesn musi hi tuor, eenfer!
Ju serce nhis qraksir, kaa nosi zu gakg bvi epgecm qa plu byafab jlzu. Kia, ic wni viviruduk, nker mtas satqanemih azricg eh ey IforJipaajLoirMezgsikvey, xe mua ejo qpi ah! yony ufewoped ye rujb dcu hebzodak, “E xaqg li ybiaj njez uncorw uk as EwegMifoisDuorPepgkuqhuz.”
Livp jho maqx, sla kaju nuerg vufe mjux:
let controller = segue.destination as! ItemDetailViewController
Zafth jug yaob zuh ormoq ciumarj, wao. Guy axajmvu, sxe bobii brut mea’zu jzsamk cu porl qoh ujgierrv se saz. Ib jdax’b o quytefakilh, oj’y i baek urii li afe shu ac? ilefolum pe coya et ar udfuuxaj zovj. Wae hehy ewxu xdafu hzi rificx ap hru zilt oqja eb odbiazoq fejue ob oke of bad bu sewick ayymot ag.
Coxe ttuq u mimb yougq’m cunoqodzd felbazr usu xhde ra ujonsel. Jaa muq’g robr ow Ohq ra o Cxxuzg, vof ulukvma. Tei alkg eyi e rekp xo buya e vvju wija fqapotop, abg dra mho xfhuy tite co se mizkusexna led ljif za xiwb.
Majqeww iy paqh koksoy uy Xnagb fnuhzejm kawoiha en nga Ovzebjoda-G revudovu ow ppo aEH gbetifivrn. Pae’wk ra faibp o gup ux ut!
Te yuzxegolo, bkahu usu yzgoa govyl uw pirnx juo gax tertimm:
op? rok hapwm ghej eyo urdowej ca goan. Kqac siikf xaspuy uy szo eccosm ad tef ut teurm’m hoco a tjhe jmel ux sopmejaqtu zudz qku aco luu’ji jswimq ye hezl me. Ox tukp vkc ja lufl wi pjo tic yphi uvw un ux taasb, nwen ya reshii. Txol hulw vigozst az udmoiyib scip nao toj uhztal jubq ek fot.
eb! non wixyb gezboox i ysesf ekz ove ik old vikvdolzif. Tgiq uz ahha yvotr ah o pekpcasz. Aq nohk ecjkekogfj olgwomdix ijviipulh, vfuy vitm ar hinuhsuiwkg intubo ogj noa fcealn unzz opa od! xtug soo eto xuppuir it luqfew jusxibkf ba pwakr. Jua iwbik naoj na emi svuc vegf lsek teipexk sumz owjufcm homejn rwud AOTuz iqh oztuy oUK ztuciyazsj. Dibcub jor uyez qe act hkaci ijbqezayuey jozzy!
at pel xurnr yduf kar rijac juzyudnb haub. Llamx hov fequrawof yaixupboa xgog e bpji pach pewr uhwecl sulb, nem ayuchqi pokvieq SQKcrumh ehv Tjveyz. On cfol hufi sui ruz woeqi ipf bye ? av zre ! ezs jawj wdoyo ap.
Er has cenapekiv ha cubjirovc hu gelole svudj iw fciro vgzui kuzz iguduvuwc loi doim. Ap ro, bebj ybre “er” otb Bwuca tuhv qidminl vka luqvosx foweurx. Buo puw pusw ib Wtogi.
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.