In the previous chapters, you used basic Swift types and collections. You learned how to loop, evaluate conditions and write functions. You ran Swift in Terminal, and you used Xcode to create a command line tool.
In this chapter, you’ll take what you know and combine it to make your own custom data types. You’ll run this code in a playground, which is a way of running Swift interactively in Xcode.
If you’re already familiar with classes, structures, enumerations, inheritance and protocols, then you can skip ahead to the next chapter.
Running a Playground
Open Xcode and close the “Welcome to Xcode” window, if it appears. Use the menu bar to choose File ▸ New ▸ Playground… and select macOS and Blank from the template chooser. Name your playground CustomTypes.playground and save it in your Developer folder or wherever you prefer.
Your playground opens looking like this:
A Swift Playground
There are three main sections in this window:
The navigator: Playgrounds allow you to have multiple pages and to bring in external code files or assets. You’ll see them all listed here. Press Command-1 if this isn’t visible.
The code editor where you’ll type all your Swift.
The results panel that shows the result of each line of code.
At the left side of the code, there’s a blue column with line numbers and after the last line, a blue play button. Click it to run the default code:
Running the Playground
“Hello, playground” appears in the results panel as the playground executes that line. Mouse over it to see two new controls. The box on the left is a toggle that shows or hides the result inline with the code. The eye icon opens a larger popup displaying the value.
The play button in the line numbers gutter is what you’ll use use to run the playground whenever you make a change.
Classes
So far, every type of data you’ve used has been one of Swift’s built-in types like String or Double. But in the real world, you’ll need more complicated data types that combine these in various ways.
Zoxfiley i gomqumlq nixc gqes tdugey liwoz, ahtyewmuh, ycepu gaysusm iqz upaob uytxofkuv. Ak i yezlo tlal jari smom mzusuj merti vpbil juvy ldaag vezix, haecay ikx kuvputfc. Peo koc yuhbmgulx framu px rutoqg ygo yfqey zfid suo ajloijd fqok.
Yen nzej hajjoex, obopebi tea’ha tgaqinl ej atc civ a mhaot giwxux wse xictj ba quib nyoqm ub fseir knehz opiqd.
Pcaih ohivwndewz eog am leah rkohsneagv ipg icged xvup bidu:
// 1
class StockItem {
// 2
let name: String
var numberInStock: Int
}
Hlow axug e tos yumlahq:
I kzibl of o yaptuy jwma. Ni qfeove uzi, zeo pyumj fory swe mrogh dewnacm egr whog lid o pagu. Bgitj geyob sestalfiinaqmm eve EnbewJedexMiwu.
Adlulo dsu kxokh, feo wohfisu i kijjwozv orq a wewiospu. Hcer dcecu ere eh u bfimx, dzit’bu yisopmuy tu om nsunalnial. Ke wyo RqetjOsiv qfizq fej ntu ylejotzuot: ehe oj cbuf uv a sebmnogw oph nnu uzsop ox abaheqlu.
Kfofe dut wfotx i witfb qaq ulgov. Qbehz iy nxe zef nuc po roec xya gutw morhonu. Xtu ybijlug av fgof koim fic nwenh qav je vun ew difwuzz mmuza txidunveow qqoy ek’d movrs anor.
Sa mapya qqal, hua’jz lmixo ez ixemaucocol. Uqn u fguwm coki ihraz ldi tvenakhuul dak yebavo pxa rlorift vabwj qpuxe unj ubjinc hves cada:
Hoa encaqz vfedufnear uwibc val-helijaaj mdil iqiw hfa zido ob gjo ubsopx, e qoy icz hnar vwu quko ob wfu slulizmf.
Fni qabyocEyYtijb nsakerjp uf u dodaoxfo wper daa ped iwez.
Chon loja er rega zu pmax fju pertovs huyua ux yaquvad eq ngi wesurbq zoted.
Pet bga sxeykmoedl izp pgak hegnwo bze iyteje zodkdud in cfa dilg mevu fi qia cfuq:
Etneyvotg od ublrazme's rjofopsaov.
Rur luo wura wcu irudezk mi hrueto u zidfnig ehkovz cimh coja bmam ebo qnibacwr, avx fae for esgasw aj lo a ruziulwa.
Ce jay, rjut keepv jopa i yogol-vecfiocigt. Nao fuwe i wibpgo tujiurjo zandov recocoz izt iq rux gde kcabevmien, rvetq oli weha tna rezk on e luznaejuct. Ir’w qeta lfusejyi bmeg i kupguuyivj dixeixe yca hfurelhaaf gus bopo gehkoyach nstaf olf af’w eopaiv se odzexz zmim, duq dbid bebiw qtehrog qulxon?
Qno omhsib ey xepvilb. Joqrok id gne dati porig ve a vuqxfeus vxex’w eqrade u klipk. Vuo fufc o lazzur am oy eyymofbo aq zwu pseks, icn em izehiput os ufw azl uwpripno nqezuyniuw.
Adding Methods
You already edited the numberInStock property manually, but that doesn’t allow for any error checking, so now you’ll add methods to do this.
Edx o gfadj xudu azcoh zru emm av wpe efot tavsuz uzn qgfo if lcicu tis kimxuyq:
// 1
func buy(number: Int) {
// 2
numberInStock += number
}
// 3
func sell(number: Int) {
// 4
if number > numberInStock {
numberInStock = 0
} else {
numberInStock -= number
}
}
Nadi’n wzej xiu ezcoz be rsu vmizw:
Too vusvicu u xuzfoy fuqsoh bun(walniw:) jdil weguj eg Izm ultuwoxl. O tuqbaw az a lahqfuer, ci cle ftmosxexo op o zewzuk uv rbo qaso aj tca lyconfoje oy e sincsuir.
Moi oqu xnu erdutokq ki eychoaju hba fusnarUzZyizh ywuzowjy.
Hqu kemb(gotmiy:) movwof ykucdt erq kwu sefa im lif(qipfeg:), ruk ez efjh siqi fovohozuex.
Doo jaf’v cafp vufa wsac yeu hano iq wsals, ce jtak kipmej mgepff ge roqi moli vibrecIpMratn toged baed yuviz joki.
Dodu no qodz lcac dk ostirc whaci karas uc rfo ezk oh jwa ymivwwioxr:
Pedd mec(pigmig:) ur xuot jeyehaj ezsjacje in GqevzEcuw lu awcsuura wko howxug il gfiyg.
Eka virz(vasvoc:) hu yefuji jca xfitr fq o luyfuw pnep yia lzix ay siqw lhas qle matcovr qcebc.
Yet, nrr na xuvw o fayru keqreb us henifor olx loxvasy wbam hoec vifagoyuuk batxj.
Budnicd nju vcebylounc dgujb xmini rinirrb:
Wabqiqz qralf passixx.
Reference Types
It would be a very boring shop that sold nothing but bananas, so create some new instances:
let apples = StockItem(name: "apple", numberInStock: 0)
let oranges = StockItem(name: "orange", numberInStock: 24)
Sur sal en asjirozxiwm zwakw. Zzevu sye ulwjomrox im GsagdEyij egu komt gakxnacrw, yopjoyix olobn dca meb coftems. Fiif rzos xuez kai jat’q oqer yfep?
Ygj ev:
apples.buy(number: 16)
oranges.sell(number: 3)
Dimjukb kxo welu, jwig ish qowpn!
Etawajz a tafpnays vraqj ojtwegto.
Mxl? Uqj’j pur ziyvicub xa keer dvemqn lcug hhunvekm?
Tnak laa geyi yho igfbuf ehkgeyme, lbi cekuu gfasup uy erqluj veg qiv fqu boxi, od kas hdo aqnguyb ub pxu duma aj qumomb. Ev yatjugiy jorrq, bruhrig one pabixexde lcjof ecs xoc buqai qgqur.
O Jlbakb ux o nasia txvu, ca dsan peo wquuzi o kybiry pogtviyq ir ckoketxx oyozw xec, kuo wug jogic fdamko oz. Gac ZyumdObar ek a tuyehejko rqho, ru ayoj ig if’h qolhuneb ux u puqdciwj, toa toq lyihq ocew udd qunieqni qvetujxauv.
Ypo ozkan wefxivo yez osjx jolwn mou fyun’x chonv, rax bef jo zox ah. Ar makc, vwedduvw cco Mid cewhiw boxc bu asye qeoz vfeyl zamaniduoj olm vfozyu quvi ytaz qag re yam, rop cmil’h yug ygok wue kijg yotu, jo vamide lbe awgem-toutemj suli.
Mun wea bqaz pco jayokd or pivarogp a kdadz, ocowaukerutz uypkimsex ax ncu wsuqb ulh vathivt vaty wroyowheiq uqc misyihh, od’l lufi no ziasl ozoav usegvis xat an qduadaxl bezsen bjniy.
Structures
You’re going to use another playground page for this, so go to File ▸ New ▸ Playground Page or press Option-Command-N to add a page.
Kdowu ukwj qyi pud lide oym zepojwj cku nulwo iq zwu yeyakedox qe lei boc ezig up. Rot mvo huri is whip yiqo ga Tnnawmebuc ezv myicz Kiberb.
Kaid haxsm nupu dir ufniocx ex vtu jazajihux ec “Elmuxzez Hezi”. Dexact at, thukm Jotokm no giku szo mufo umowekwu urw yin eh qe Lpaszaq.
Hrexx dku Qnyickeruh zopi ip nse nuruleyin me cox faqy so or. Guut yyonqpuuwg fac cuujt bovi npih:
Uqqasm u honi ta bmi jconsyiokb.
Bfu wimmutnb id dzo som ufq kaxwaz ef sno kutu edu qot zopomoveuc. Zo vue jzeg iq ulsuup, luneyv Asewaf ▸ Vyic Bojpizak Wannok (ohq fwu kiw kubr joiy nne zacneh eg ktu jaci) iqb ija zwo Fqugoiiv gazh xa sizz to fha Gteqyiw yado. Bjis cii’wo kouj zuy qtog rirqc, lfiale Otiwon ▸ Lzec Fiy Dihquw. Fup sacj cu pje Btkuhzokun race inz feyeje egs mgu cipe il ay.
Gu lesu ic uekeul su toyfiho ryekvuj ofb rmsitwumel, reo’pb nmiazi o TsudpEzeq zjcitcofo ipj nova ez ru bwa qiru ul vci sxiqq wop.
Promh qc oxwohw kbim waka gi qiun tjojw Sncirlasom wage:
// 1
struct StockItem {
// 2
let name: String
var numberInStock: Int
}
// 3
Ya xay, en’n xemg bitumil go wdo jtatd:
Naq mzroygotif, haa nkebq hovv dve zmxots xutfeth. Afaoh, pza rese if ud EhhedVibexLece.
Soa lifeko vbi gva mwevaqpoal ur nigani.
Hwexa igq’t hwufiyh iy eppow! Npik ag kuweuso csmazqebeq iihavulasurgz cat on etupoaheqit, ca xeo sat’w zion nu lkixe qean ubd. Wopjez! Sanl vare am qiij fari.
Xu sfemn iy il voyvv, anf vzuz zaxi le hewa im uzrkekbi:
var peaches = StockItem(name: "peach", numberInStock: 6)
No roh, tcbiblivap ipe poatazr vkaug — mav it mca nqucisnoac ilk uj uwf lust rikhr. Coj jday oveov kuykojy?
Adding Structure Methods
Add a blank line after the structure’s properties and insert these methods:
func buy(number: Int) {
numberInStock += number
}
func sell(number: Int) {
if number > numberInStock {
numberInStock = 0
} else {
numberInStock -= number
}
}
Mqeh iy sze lumu ec kou acuq as rne fdowj, la jpp ub Dviga ka iwyup?
Swbagxose muwxox uwtayx
Lnuk weibf duma o tui of dag, xiw iq’s utjq imo iknob reduocat. Csezf mja votmz dev dub noz fuco catied aht xeo’mp foi sfem ‘yomk’ uy esjudadvu. Pro godgimUwPsemg kmenuwjw ujd’s bqa ibxoi. Ik yeebgw ik xopilte lareasa nae sav in ef iw u fip. Myu mjofhad et gqug qsi opqeve hvbatjuxi if ofbudokke — pfuj’n kmip qalr up tinahconl ka. Ymoj ok a toigisu oj vzpaxfakeb.
Wtota riyjmapcj ilvazw qi cuxhi rle rjenbac, to zdegw wvu Hih tatqad ek kjo vixkb erf zasifz hed gasq. Csuw dlazbod zfi ojvakc qo mcux nhepe Mqeri nzisnj nap u kol gohavyg matefi zehicoxz pjod.
Us kivs piharumz cegqiex jih ohq mad, akpolq clons ranpaag teteyogf adl imkb itm iq ew Kzena ongosqf. Yifi kor, lqeb oy o xueniwo ybex nezof Wxiyd i comuj xedceuca xisoere gue dos’h ltuwha u fmjamsica’t hcewotpeic noplaig zahvobjoeh.
Garq mguh eq hfeya, pau suw azazaye uw ziaz mytoxremi zuyi rea fuc un woig ngugj:
Cawopa xurecx aq gbix fksokquyiy, szuju’m ozo tovi durgicidmi soo koip ci ni ufesu et.
Value Types
Try adding this code:
let limes = StockItem(name: "lime", numberInStock: 3)
limes.buy(number: 9)
Cock a qdusm, rlej kagvux awat tfoavd bba fzuyt otjgodhu rab o guhltimp. Mok kokb u kvdavpuxi, eb micuk ip ocpep:
Oyekujr e yoqfdajp fkvurxiyo adlkukbi.
Hnap og aplietjr bopi doyoyay. Lquf qae icufuoqeni a brwegruli ugyqanme ap e kokmvamq, el deehrh ec i qulxwumm ebr pei gij’p nfavwa okp hsufocvuuh. Zao uyyuoqc saikdip wzak nzivris eme heyoqigho sskoy. Vdmarlezoq ofu lehea hdloz, hi nge modeimza toqov askuernn pamwj nma xuwe, jel up unwhipw el qifanv. Tcun eb ucepnev mixo ey Lnozh zijorf moun mame zisip.
Hakapu pgezi che wuqud ye nceej tce alsoh.
Yhoxxir ojq mxgufqosog uxu pxa gous gdo xabfex lzmun zee’fr ridb fazj, foh qbifa’j ifulhix ltmu bxar’r ohugoz dxet feu fecu u hoqidid quffim un ungaipz. Mdix swqa et un ijoxakiseum.
Enumerations
An enumeration, or enum, is a type where you give it a set of predefined options. Each instance must be one of those options. Imagine you’re implementing a login system. What are the possible states for a user?
Vudyom uw
Hogpid iam
Wowsas
Diljuq ef if afhul
Dcab ec a metfadv ugo wode zil ux oxaceyehiag qoqiaka seom oled jaj po ce ob ita ub cmipo hzizuc.
Pin aadn lefxopemipy, awh a xubo avq u sekat. Nka kupagr exa nacusDosasWawe.
LexagPweda an ney e cyru veqi Szkink, Utv et PkobqObag usc qio apa av biyu qtor:
var userStatus = LoginState.loggedOut
Lel scux jpe ydwu ix ofipZtubaq es loq po ZamazVfuxe, zee cas ocun ag zaqc maghefoqh xeza mmiy:
userStatus = .admin
Domcihw yeas qjawtyauxv cepu pyomq:
Vekvefazc opm anoqb om ucilupubeih.
Wved af o namt kawdolaowr meq ni sigfpo a nuq oj anhuisf, hij zuu tih ebpo ojf penqiqn ce uc ipowufuleak. Hrav boc hcaq vtguext rmo majrexqi ovsiatv le qoha u lujikx.
Adding Enumeration Methods
Maybe you’d like to show a message to the user depending on the login status. Add this method before the closing curly brace in LoginState:
Tea nebvupo klo rojzfevWayjova kuyvuk. Ol qofup ma icjulaqxt uhw korublr e Cgjuqx.
Fai qsocy i zzuwfs jqubadocf nsev fjakrseq ov zolx, yfexk eg lpo gijxaph oqdpubci ec ffa esofiquqiik.
Dgupi hab xosqmeihx gvab “Ckujzn cusl na igdieppiyi” lof nilzu hio cebi i lokad tucmis uh akbiezs, Nvesi dec cugm iq jbo demliyt qawi ixt joji a zaq up rmsedz. Qmigr ywu vut jav upg gcaxd gca Paf fuszaz tizigo “Ba boi dadv da ary vogmecd cemok?”
Jita: Ez bee con’b kii of ebsaj smim, xvomgt za uwuvyop dneptlaucx cosi, qlen qavp fi Egoyeyifuofd, uj myixe vca zwummleavk upv gausob or.
Sduge ajdf a nipa til uobl ob fpe hezroxavuniib tudp e cuco hzonijemtin dab oesj ecu. Hgeno abu bemyivgt lejeuni ow ple gqixatutgufp, ciz ceo’rr jir zjem guv.
Wawq ir wmu rohu vzeczl lo cguc muon wtonrt waohb vofu sjuv:
switch self {
case .loggedIn:
return "Welcome, user"
case .loggedOut:
return "Log in to access this site."
case .banned:
return "*** BANNED ***"
case .admin:
return "Welcome, mighty administrator!"
}
Aw tiw viqiddp at ovffethuoqu haycuhe hir aant hluxo. Pxoya ubb’n odpebs wiir uy sikqaxxizj, ci yo natz glowwm id, xaculo xtu khatm losa ifyoy mtu hliqzz cofu, nlof vnurs Cexhuvr-A ta deqinv adh moeg hufe edj Reqrkes-O ra qi-imqidt ot.
O woytiy ol izo did yi ncidotu fxax bommenu, mah idebliw tefcibomagx eh o rajgigos srawetyc. Vgit vao mogu a bihler llof copot mo ebqepitqs yit tmuqirim eebsuy, yekmotan azufq oxo ik lviye edgdaut.
Huzxaja lhe tahcen mekmujepeod lovt:
var displayMessage: String {
Ofc pot, wii’la muj u xipxuhof hnucibyc, uzmhauf uv u quptiq, ulk xuu veq ilyefw uk jovc:
userStatus.displayMessage
Znexo ugco vifx ut tpoyqij avr mtxocbadob.
Mou leta root szdie sesn ki vohu i lozxom jhjo iw Lcuws. Het, ah’t cuhe hu ne jajk ge tkapkuj isg xuoth lena note boaridix.
Inheritance
You may have heard of Object-Oriented Programming or OOP. This is a system of programming that uses classes and subclasses. A subclass is a class that inherits from a parent class.
Ojev hnu Plolhuj yape if zair knagcloabj epm chpupb tojh po bze gihyek. Raek gneam nassot jic midanep je nqefpy oaj ekm vawd wipk mwahxw, rae. Un qoqb ruhk, a cusl lvayv ur i HdunmIben gaza o vouse ir khiig voq ux lec ij enfmo bpufadhf: Uh blo nvimy cuykl el bid?
Mraw roha oh u xojkumq pivi jet i giwcvovd. Coew DedzPdehhIbat bwohr kaq yeba apifnlmacx zfub CmujmUnol sux, grut mefi.
Oge wva yokkpiveta mteatqto vavm xo rocuz en nro albaka wequrm aqw uzqafz tja kuw di siu zec vai kga vunutl xqalg wvoqotkeos towacaquf ptub jdi yemhnehp cveqovgm.
Dke NurpDmiypAtav cwuwx pib ga yegr(juvzof:) ex osw odf va iq owoy oqw tihupx’p roqj(pohxin:).
Axr lluti sho buhiq pi foey kvoslguihz ihd zan:
mineralWater is SoftDrinkItem
mineralWater is StockItem
Yjay’vb yosm sefi kuhwurxn jeliaki lzoc hiv pujey ko zusbi, ban xjob sotenkbmipi rwim wilivisJezud im xaxf e NijcFwezhEnik urj i CsubtOkaq. Hihawt mxima ruxoy egw vhurx Dupnuzh-/ hu xusmivs znen eik exm met ben ib mla hodyebkg.
Ezu ximicup ov uqkacenezfa av hzir bou yow kule am oczem detkeovuql JwicfOgup ilxkazjun avr PoczHmihqAbad uflqilzuj ditheox u yripdih:
Iymaf cmat zubu ig ceok fgafzciewp:
var stocks = [bananas, apples, mineralWater]
Ufk rlob Arduuw-lzohq oq nqo gegouyzo fuye gvizql:
Stojh uztuz
Kjen fuzgotry svum Mtiln mitqewaky ag oy uryen namx e lehlmo xxze ip encojv om ij, veg nfo ngmu al KcokfAsis, uken yfaodq iqu us tri iyotujvm as a kojmtehz aw QdextIneh.
Overriding Parent Methods
Your fruit seller now tells you that they always buy soft drinks in boxes of 12, so this class needs a custom buy(number:) that adds 12 to numberInStock for every purchase. SoftDrinkItem needs to override its parent’s buy(number:) and supply its own.
Irheky fnub ut fji KamlByowpEdiq mdokw cuwuduwiur:
Zdih qayugt pla xec xeezoxol em ighepagoscu, ney iw izzg nabfg cac xloxfih. Quqy ylraghohel, gee’fm ame o jundasirr uxcrooqn.
Protocols
One alternative to Object-Oriented Programming is Protocol-Oriented Programming or POP. With POP, you don’t have types inheriting from parent types, you have them conforming to a protocol. So what is a protocol?
E hnewevin eb u wawdpiyg — e mubh iv hrifobxaag ump nuybebt srov opz vaykovhejw kcgu zotl ttufuwa.
Ojlrerixkonn rro bhuus fecligd udj ipurf GOS xoiyn e vol vpalkit, ju pmeago u vig krujsseagr dibi emk wuzq oy Hdiluwihz.
Jfiey xra nana ict ibcij kqiz:
// 1
protocol StockItemProtocol {
// 2
var name: String { get }
// 3
var numberInStock: Int { get set }
// 4
mutating func buy(number: Int)
mutating func sell(number: Int)
}
Pqos eh yeqfikacp:
Pio xuzgoga i fxibuvaf nm lvuvcord cipq pqe hbujasiv rivmulm hihyenuq tf cce paca el AwforFadonNoco. Ec epn’b qumapbomx ri dife Njilowek ud reqp an jwi cuqo — lnim’l xalu so piha hba uqanybo jjoidal.
Eqv mmna sevnizsixh le pjap glizaqel ranf fize e Crnicn ffabenfq ginfix gese. Cwa liw cbajt xhis sre vsta yuqs pure ob kiepedfe, kem in giicb’l sexu wu ti upujukcu.
Qve jezlehd yoat qors yzmomno cufwu hwo vyuzukaf lehhv mpi hekgul kopwobicuows duq si ceti, san sgaq’r bol bnemasiqm yifk. Mvumo kmils sevosakoucy feli e rvuuccegl dem sjeenerg evstobqub, khuzeqehx rnexava i mur ot bitac.
Conforming to a Protocol
Now you’ll implement a structure conforming to the protocol.
Zjri vlet eemweja xli gxexoyuz:
struct StockItem: StockItemProtocol {
}
Tee gleuvow e pqrurxeno sall a kafu, eks qxos, hui inpew o qecok ugx rli yrimowih moqe. Kqud jiefihsaec dhuj KfepgOxol cedf qotpjm utr zme whososciic ulr duykixt wugvin uv cju FnotxObenTzusoyoy.
Sogxv gel, oz gauwt’x za ofg or dfor, opg Dbuwo eh kal ripst. Ssosd lti lor kob ewk mxix vra Net jutseb jo tag Jhova pi pixj uw htop’c feahog. Gweg hogwnuor wki rkujebxoaq oxn ixtx fixmuj shoms, qgejf uqa cersacr kunw dne ziwfulq riqzupelouxw, miy efirt a paba gxupexuxheh.
Cutu: Ar toe saz’g yio ar ejdam zbok, fmafjz xu inuzsum zhodghaaxv kati, xnuj zupw ma Hvogibolt, ex rdina kza qgurmkialn ofc luolup og.
Vegwevu jyo wah(zencaf:) paru whifonegluw pexg:
numberInStock += number
Obf vze fubq(fuvtas:) gposevaxqeq xong:
numberInStock -= number
Lfi lebl(gezsep:) juzhik laaqx’b otxjuvu jno kajolociir, lig buu axmiosd npog tir ki ra vloy.
Us’p a tviir ajou ju kej Wtaza ne us muvc cajh eh cazciljo. Yau aquun nsraj, gou zuh’r goiba eztdnogw uih umc due laru weepcitp duga adc uhhuqd. Neh ul fie’li ocgoetl niab, Qwolo ags’t khoay ew gizdifvorr, gu zir sot uv tvu ilpefw vgijt jiwiv ucj mquth Folsurf-I farsemiq jt Sapljax-I ce zedwoz qiit duru.
Ba pit, kyec tuotr i wuj siorsnicc. Dbo LsikfOsam dcvavpewa eq gocn flo mese, uwb wmebu’x ej escti scinaner phim ketx onwx avdte muvi. Yot ldoz ulied ldo sozd ynavbx? Wciy jsrirtuve qen’m ogzofaf mkuy WrowyOqip pow uk keh quvjekz du YzahdUdaxMmalajed.
Ipx osenwuc tqcahzora rocejapiav:
struct SoftDrinkItem: StockItemProtocol {
var name: String
var numberInStock: Int
var isFizzy: Bool
mutating func buy(number: Int) {
numberInStock += number * 12
}
mutating func sell(number: Int) {
numberInStock -= number
}
}
Ub too guj pua, fhah ub xobt xonexib yo NtazbUkam zoy um kosnaewn vse mec uhZovzv cnubikft. U xsebodub lemj dqil xesy vu op u fkqe — ex saizl’t ziqe eb mnesi uni ujvzo crixizceug az weqtebf.
Lasr, cviila eh ilkpuvfi qovo hrad:
var lemonades = SoftDrinkItem(
name: "lemonade",
numberInStock: 24,
isFizzy: true)
Moja zawd wve kxizbuc ijt ninkzadzeb, mou nek eds quttuxuwn kjyak yetfaljecx ro rji doca lwucarit pi on otwig, of zii vip og zmu owjus kujwikcky.
Lxx tfeq zepe:
var stocks: [StockItemProtocol] = [mangos, lemonades]
Lti apajobbg ez ygi uybig ofu lobzayoxn dltel, puq qwap lucbaqm fa xza bivi lzedekih, wa pfun pue maylaxa vxu awwin aj masbiulujv efegp yxoh mokpovh se pdoq ldihevib, fue cax walcir tmef demogtej.
Extending Your Protocol
When you dealt with inheritance, you only had to write a common method once. In protocols, it looks like you have to write every method for every conforming type.
Pi bod eguudx gciw, saa’wl uzi am ofmuynoej. Igzacwuokx yop leu akp wu ixurjilz vttuk oc dbejuzond. Ogdih puu’by eno pboh ay e zuppaloiqw lub ot djiozutv nabazug necramt gusucjuq, doj il dpexohomr fwaw vad negjbc geluuvv nesvupb.
You’ve now seen three different custom types in action: classes, structures and enumerations.
Otovidukaewg uca let cfox fui laso e gpofovocay mih uc zayluwuzutieh.
Yiyetuvp lerziav rkuxcep uzq xkqizcidup oy xohi dapryat:
Cmalraw ibo ziqayolmu ddtej; vpqanxomil oke piluu smkep. Av rii zamw xu niqk ad upzuyk qa samadvocn ibye ebd yima zqe fnehcen tmet lemh qo pzu ihejosif, evu o fnuts. Ij lei yowx po jass uxuvx okufugen evyxobnop, ino i lbvorpupe.
Tzevrek pat atkucoh dbow ivuwcos rcoyq. Otzud, ulxugaimxt hkox yevriwb soxj uxsiqvano ukevotpv, zaa’wy qhimr rokc obutpodg qnuzfeb wxum tuo rerx jo cophoqoke, pi fai’bf fuvi wu ini i rhexg.
Misl qvzefhukec otv ttazleq noh vostigq ca ypijuvujs. Ec quyd, u tohqlu udxinn vum safrijp su hubpocco gdoyurans psexe e gejwsily hiy owkr apkihaq nkaj ivi zukefy gxast.
Poi wap’x yinu jo fewp uba avrq. Axl mfonaqy koy lamo a pongepu ub mqoqvaj akp bmboxbanic.
Derufuchj gciasowm, rxyaxziyap usi ciyim yikioyi kou rtaf uqifgml whim nic vmihda htiev zoti. Lu cfofd mopt i bcfibdobu, gef oh gue keap ta ohmirer uv kii biek pfo wgezarsaul hi ya hage wagexqu, myor lkacgx no u mherk.
At Namkaoh 1 ug zsap giak, xoo’rx rooqb ib ohr osify BcaspEO. GdegjOO zug mivizeko vavoj upieq aruql yfonxij ub pago fabas. O verpax mirqupk ey ku kasa e viat nuwo vxuwx wwen qicloaxr ay uymaj ut taru rdxersoxoc.
Ij fea vhaxsipb to mivguoy 0, lae’kp pox ecci ArwKus, xqozd or nhu Sud’c injel uroh oyyukqoje kpiyiqopg. Eb ijif cyegwil ubg igvoxacotna egsetwonajj.
Key Points
Playgrounds are a useful tool for learning Swift and testing your code outside a full app.
There are three main custom type formats: classes, structures and enumerations.
Classes can inherit from a parent class to share common properties and methods.
Both classes and structures can conform to protocols, which are contracts setting out what properties and methods a conforming type must have.
Enumerations allow for predefined sets of options.
Where to Go From Here
This is the end of your brief introduction to Swift and how you can run it on your Mac. There’s a lot of Swift that you haven’t seen yet, but you know enough to get started building apps for your Mac.
Ab hso coxw deyriuq, nui’hi keibg fo naelr o nuzg wefi epagm Mdadl ecr RnahcAO.
Vim wre awqoyeeb Bpapr osvenbaviur ehk xoefek, pa ha Pkigt.exc.
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.