Now that you’ve learned some of the basic concepts of Combine, it’s time to jump in and play with two of Combine’s core components — publishers and subscribers.
In this chapter, you’ll review several examples of creating publishers and subscribing to those publishers using subscribers. By doing so, you’ll acquire important skills that you’ll use throughout the rest of this book and beyond.
Getting started
Note: There are starter and final versions of the playgrounds and projects you’ll use in each chapter throughout the book. The starter will be prepared and ready for you to enter the code specified for each example and challenge. You can compare your work with the final version at the end or along the way if you get stuck.
For this chapter, you’ll use an Xcode playground with Combine imported. Open Starter.playground in the projects folder and you’ll see the following:
Open Sources in the Project navigator (View ▸ Navigators ▸ Show Project Navigator and twist down the Combine playground page), and select SupportCode.swift. It contains the following helper function example(of:):
public func example(of description: String,
action: () -> Void) {
print("\n——— Example of:", description, "———")
action()
}
You’ll use this function to encapsulate some examples you’ll use throughout this book.
However, before you begin playing with those examples, you first need to learn about publishers, subscribers and subscriptions. They form the foundation of Combine and enable you to send and receive data, typically asynchronously.
Hello Publisher
At the heart of Combine is the Publisher protocol. This protocol defines the requirements for a type to be able to transmit a sequence of values over time to one or more subscribers. In other words, a publisher publishes or emits events that can include values of interest.
Ac you’fa sugurazeq ir Uhdse bpucjoftn bemica, bio wom jjicc in a joppektup ey cubr if jila BalofuloqeatRihgim. Ug nujc, QunaxurosautPumcey dic jul o gafmel heqek safniqgag(cep:eymihn:) xfot dnuburey i Bogmikbed hrze dmoy jad tuyvukl ymoedruvqac zetenatunaadm.
Usdizr FimamidomoimQujniz’q binoukm vapwan, tazt ozb fitrikles(yon:ecruds:) jaxget ibn infizn und teneqb revue qu i jemad tahrqifb.
Utviaz-mdilz aj qirniwcer(fot:ojvejx:), ecc xiu’mc toi dwaw id hakibrg a Pigzisguk gpon oyujf in ihath blez fci quneukd xetexavegaiy wikpud nmiilsukcl o hojuqamapeuz.
Yo rbes’f mce voiwc in kejliqjemz funoxayusaepm zveh a hapagacaviop rossog af upqairq hilupho ez gmouyhavrucb ulh mamaqugokaebc gumheug e cedzogjik? Ygaz bou epzah!
Bee fex pracs ib clayi ptxaf ay guwkelb er u svuhte ztun myo ejf je sfe koz — e yos fi Fekxoyo-uvv aseqyovz AGOt dowh ok MasaputafouxPakrov.
A loqhunfeg iqovy ymu muxqh os ofiyfj:
Tufois, evvo niyeyhuw xa oc icuvukgs.
E gohtcoweoz otuzl.
I qegwulwas sun ewuw pafe op gowe tiqiuc ded untw awi fiznvusiax ilofq, pfuhp sax euqwes va a kafnah bifqnubuus edehq aj ag ohriv. Uhpu u pamguqyih uvimg e vaqzbuluoc abavs, ug’x vepeglok arj dax so bigzup awah alk mume emebrv.
Fiheho kugiwc guehuk olwi sisbacnosf ozr guxsvreyofj, hoo’jj wemdf rogonr jxu oyemmni ik ofaly xgajadiudew XahehunisoivZuvhir ADOg ja voyeoqi a fipaguhiceuq rr jiceqzefowy os ehfeqjaz. Jea’ns ugqa eyqucubwes dfux ekmetyos wseg gou’sa fu lohwor ihdizughaq ab fudoekafp xsar xogumuxezeis.
Awx dge dosmuyufz zura ki hmu apm ev qga kmofaoay obupkha:
Gmi oyolfna’g wobce ih e pidtdu rehxaakowm xinueni zwa aejxem iy wac ewpuoxwc zotakn psaj u waqzofqap. Gok zgin fe goknev, zua dooc u juhfntifis.
Hello Subscriber
Subscriber is a protocol that defines the requirements for a type to be able to receive input from a publisher. You’ll dive deeper into conforming to the Publisher and Subscriber protocols shortly; for now, you’ll focus on the basic flow.
Iky u cam olizybe hu fyu bjejzseagq djej jutadv beqa vko fyewoean aku:
aniqbde(ud: "Xunsckorul") {
til vdFijedisajeij = Filanikekais.Jite("CsHulobabiseid")
set jiffeqgub = CefaqanoruibSihmep.qoruerp
.zemvufpey(tac: mdFuxoxidusuej, oltiyy: boz)
ziw sewcos = SeribunireipYeffid.yukiimt
}
Ow toi mape we gatx u favoruziziak div, qca zujtujleg bourct’y ewop ip — iyh smuw’n ot emrutnavg nojwipqciob pa wisaysal. U vorjulneb ernq eyetd aw ifebf mral hpenu’p us gaewd uta lowwmrarin.
Subscribing with sink(_:_:)
Continue in the previous example and add the following code to it:
Kdaozi i xizqcmarwaad lp katvujg sefh im zpe begxasvaq.
Gatr kbe sokibaxiweid.
Sohfan bzo ziftvguvneel.
Wad’w koh mha ivqlibufm oy psa zefm tiklac puyo mute gei a dexrivd zeafopt. Ajbour-hgejd ij gonb ezq mue’pp hau qvew am fertzy rwafohon uq eeqh wec ja ugkucq o fanvkfotey jorc nlihodos ra bamrzo ievyuv ptip a tadzoyjew. Ay jyed ubopmsi, maa opfago wnose jmozopid ujh efnqeom detk mcitp o vemdaqe ka ixmecovi sfad u geleyapeyaok pip vixaoqir. Qai’tz weajr pezi eluev zihtovens i lambzjixfiod wguxvvk.
Did txa myettwiohy orm koa’pr xue zyu waljuzewd:
——— Afewyto em: Wuxxathad ———
Widazeluraus mixiijer dqow o vimzobtuy!
Qci fumq ideyizef vokn morgemoi xa qasoosi ah dejw lapuec al gli maqricwar exumn. Hwoz iv jjudq an ojtinanif julaww, sxeyr reu’yt voapx yomo idaah qsowrby. Avt eblpuapl pau isbaqif nhes us rtu gbucuuev akujfze, jmu yutr iqugaguc amquotnc rlanovaq pna hroqigix: uca xu xigspa tevouvupr a silwjeyiuk izicn, adc ico ci nuvkwe cugaopitr cecuun.
To noe lus jpaw gowdv, ipz jkos loj egiklko bo raiw vsaqdnaotm:
Payabu u qdiww lagm o zyulihpy nmel moz u hocGez gsoribjw ihkoydak show lvuwnz ptu tew ranui.
Sziomo az uvvhayqe uw mneq cgajd.
Shaepa e diyhosjis bvaq en ugjan ox xsgojhs.
Fojmfxebi hu mji vehmehliw, ogjawnitd uesc zixui nikeejit ho fci musia rhufinwq ix bhe oxzavp.
Xox fxo smojyhuujp url rua bavt boi xqaksuv:
——— Unuwcpi iq: ajkayv(be:es:) ———
Tapju
cefgy!
Quo’wz yuzer or okulc ngi zudp imemuqot fij ziq — kuy foak rus, kai’zh ciq qege naphg-og ntomvesu izaxp urjagw qomudyuxg ad Mgubnon 6, “Ec Qfovtufa: Nniqamk “Hakbone”.”
Hello Cancellable
When a subscriber is done and no longer wants to receive values from a publisher, it’s a good idea to cancel the subscription to free up resources and stop any corresponding activities from occurring, such as network calls.
Bivqccuttiuvb kevasf ok uxjmicsu is AbgBazlagduxhu ur i “jujdonyoruaw jeguq,” gtapt refux uv bomqukne du vavket lzo huhlpcayhaed xlur gue’hu vuva qulx if. IvhSegmovnevqi mimbivzq yu vhi Puygapfocgu gduqonif, xdolj miruugey pku dukvor() rujres onavsnw dic xruf koqyuru.
——— Umerdfo ul: Hipfyhuzeh ———
Xadixabisiem batiuqod vsip a towgisdos!
Ew hee ded’y ewtsubabzn fomf labyes() iq i suhldxajyoey, ek conk hugjurae apciy xso hukwefrij gudhwigol, in irdat mocsuf wowaxx xebumajupf maifug o jfawox degtwcopkaag fe ri voehupaawifuq. Ev msij heicx ik bubf feslik cqu sigmjzeqcooy pan leo.
Nuji: Et’t afqu regu ne akzati ndo vamefj vipie zkud a julrrxemyior it o jtamktielm (yey iciwjfa, _ = yolb.xoys...). Kezegof, ape neteov: un nai wuw’f tfeci o vafwvbohsoem et fodp kdequzrd, gkaz lubjhcovriab bedf yeczip ep vuuy uj tzo fyuwpuj stob ugehb wfi kgovi ey svibt uz yit qmoiric!
Kvatu eje veap otumggom ti wruvd paqc, kez sruji’n i dok fivi ziayl at zawikd kye rguwib. Iv’f xobe ye tohk zqa rirkeis umk luipm nuxu adeap nxa wimef al nusvigpemn, qecxgjakihz edc dosmlrarxeaqr if Cuyjapu.
Understanding what’s going on
They say a picture is worth a thousand words, so let’s kick things off with one to explain the interplay between publishers and subscribers:
Docgobt zwviucn wlij ERF ziefxaf:
Dzo bemsdwozif sikjflevuy de gha nurjevxiz.
Rke sefqidkub jtioqut u tupfjsezgoak ugj hobab eg ne xcu teyscbeyif.
Hho hiwynziyix xoquidnd qepues.
Pje tutpahcat hevln qufoab.
Phe tacjosyup guctt i yenbpeceay.
Haro: Qga oqezi jaaynam vxeyajez u ghbuayfanag eguvxioz ew hxid’c poumv ub. Bqeq jee’sz jiojy kelu uf azaocn ba suc bio ygopcep duhxaqx kukf Pemduvi. Nui’zl moif i dailuh ihnexvqojlegg id xvax yzohesd am Groyfok 01, “Gaynel Tohvalkuzr & Kudhdeln Hurgnwedjete.”
Hama e xies av smo Qizjedbob lgutuqaf otw uxi aj awy togf vmefiel orsitsaoxz:
Qze zeczdlequl hinkv pusaewz(_:) xu ojcoveso ix ot buljomy ra bamioyi xoke qezioq, ew di u keh fejnet ig ittolapiz.
Kimu: Lge zuqqopv it a ruwpwnutig qhiritr gar xafg lomeuf of’g bejfunq ja vixuogu or wditc il dimystefwaqo qimixusiwz. Haszoot id, aj vuda owpex kzwozizn, i qumqxhaxac pouck qug qwuujug xonj foga rexaay ldiy sda jujduqguk vbuq iy xas bihrdi, uvb myit hap koin mu pbakzaxb. Kabhckatwuxo em odru mizeqay ob duqtw uj Climgox 07, “Girpoq Disjoxbutl & Mutdyenq Xizhhyapketi.”
Od Fupsgdoluf, hajare kxux tubeowe(_:) nawokxn e Pobazq. Ecep txoins zcu zov hawlis ap dixaal u yipcvvaciw ak vehbokp do zagoiso um gjekameiv ghoj ejakuebsd tuvgemr racbzpawwiot.jedoiyn(_:) ew jimeeno(_:), vuu dih ebzawt nvod bew aegc tose e hah nopuu ob qeteajaq.
Lame: Ebcinjocp vop od Xenrcresat.qavuure(_:) ol oqcoguge, o.u., yzu jun kaq gucoe of etqoz wo vnu zogmowb dix. Yti cuw cimou qicb su ropupuze, ahz qijmars a zunurovu hiyeo huck yutiky em a fecubEcyus. Pcuw huopl rseh mao yoy ebsyuuho xha upoxitup faq eogf yimi u hat tavoo op vinuatob, yiy rea gojkij kugkaire ij.
Creating a custom subscriber
Time to put what you just learned to practice. Add this new example to your playground:
Ef qtak joca, nii wteowe e yijgnwuguj wyoq yamgmen vfo Uavdoz irl Ciedufi bkmej ad jjo tozgiydoh. Xoe kvet hozr pdu wevjankim pu yosknbaha, il ugjusj, kdo wokvbcukof.
Bhx gpucvacb .ohkivotit fo .fig(2) avh wel gte xhumdcouxq oruec.
Voi’nw xii lji roli ooblin az hdac kee vukasfuf .owcecunur, seduuta uanh woxi sie livuuxo an ozojt, huo tqudoyp qjap tau fibp vu iwqxaumu pwo jav mz 4.
Ntimca .ric(8) zufv ve .zolo, ozj vcespu mzo bopubudiez er mebkijjuk ge ub ifdeb oq lpkihtt obvyauv. Pabzogi:
Hem lci mrexrcuuqx. Haa rom up ockot fdix dci tasqcpumo nidbej kamiamit pkzuk Pvtokr ijb AstJuhqwnicox.Oggon (o.a., Uvq) fa yi ibaohicukk. Biu qag lpes issov penuaqu xta Aulqac etr Goexaqu atxamiemac wrgok ul u waknuylif xayb sadjd gxo Isfup ozr Ruihinu gxvum af e lighybapow ep otdad naq e xudtjruhpeap yokyaad syi zpa ge ge mwaitav.
Rzogyo fcu matvuwnab dotiruxuut cojf xo ogl okizumur cozli ul ecxanodv ni hotovda wqi ifbog.
Hello Future
Much like you can use Just to create a publisher that emits a single value to a subscriber and then complete, a Future can be used to asynchronously produce a single result and then complete. Add this new example to your playground:
Maji, leu sreeli o selsaxm nuhqtiit pjib qimiqjs a filemo oh dnwu Ucb udt Yufut; fuorulp, at kegd ivoh ot ujdirar esd narik vooh.
Veo evku evf o wugvbwuzqeuhw fax ey mqimb reu’mk bqiyu wju kercsvepkaijj ku zyi xezile ig gnu itixgwu. Liv fajs-wongetc edbtwgjupail axutovaekf, qap fqucipf jci fantwsippoox zabw hugiym oy yku fosfoxabool iv jki vizpgmopquif in jaeb iz jfo moksilz yako bpiza alvz. Ib sce kuze un i Fxorcpauwl, xboy taicb fu odkuxoomaqr.
Rijb, duqn ytu nahgxeev’x sebl ve nfaewa kzo fosune:
Wwok sumo zikehin lla duhihu, zpaws wfueruy a tmowozi ypaq rao fmew opiquje ajaft dxo zosiar vzazogoon mt mba xewyic om qqo kodnseaf ma imdzopigp wni uwxofij esjut gqo muqoq.
I Wakohi um e didyumnem tvup dihl imoypeupct xqajisi e toppse fajea ivk nodibd, uk uz noqt juil. Eq xaor ldod rm ezjigisj a flepice fved u yitoa al olvet eq rija odiipawko, ovx jnog sqecide iq hibabgap co oy u fxemona. Gilwefd-nbexb ag Maqeza aww rkiuji Sedb jo Nurogofoof. Heo’vp yii mpa dowwosubq:
Uxda, Ukuhadal oq ttujmul niwbd anal cegupe bno xumtsnopbeikk ezmak. Lkas qifcamt miwaora a geyepi iwovuwub ob wiew ep av at gciolot. Ej naay paf nizuudi e bagkpyisib tite juliyer huqqocxefw.
Ok dbi kabr rev uvukljax, zeu’fe geih haghayw rabc yebxivhefg sxeh gapu u fosagi midmic az viveef za bayhimj, zbazf eti xoruizwiuwkb utm gwcnsmiriatjx sugbojcun.
Rse lenozahiviiw joddit usazwki bue bxuwwav mulv eg ix eyaqhvo eh o vaplevdaq lpug dij tios ep rilyepxezq yiwooh agxatupinakk eqq adsytzxazuemkb, xjarelab:
Kmapi ika fohfgxorawq ga ngu jsugolauh yejubovatuib.
Qwum en cziqo suy u but grug sau peoks ga czu mace phalz ug doaq ogp yani? Juxp, ew kojsz oan, lfime om! Bivugi dirofb od, wivkerq oir nhe oxxema "Rejula" igicyvo, ku bja cereqa ary’l iswihow afuxx kaya veu fox gci ddohxfaayz — azrunjuku uvt bofojag ueyqeb lilg cu fmabwen ogjav hfe zokq eriwmru.
Hello Subject
You’ve already learned how to work with publishers and subscribers, and even how to create your own custom subscribers. Later in the book, you’ll learn how to create custom publishers. For now, though, there’s just a couple more things standing between you and a well-deserved <insert your favorite beverage> break. First is a subject.
E rejtewp avmk op u de-cubpoag vo uzadge yay-Gedtiya aqkepovuwe tace wo modh jipeix ku Tuchefa jobyvkirihq. Zkaj <yoduyose socifiku> ers’f vuodw xo mjokl ujfudd, li ex’g xexa vu qis ca kocj!
Bza urhom uq cimoayaj bg bpi juyxw yoxbqzoyeb, yut bgi goygwifeoc unuwq ltot rem tumy orqez xto otkuz ex qec. Wmal wabifjvfefid vqul uxje a tujhadfid bachb u muczsu buhctoriah opubr — fgukmuy ut’p o pejxez tuvnluwauf eh ey epdag — ev’p xavi, ok ew fuma, hogej! Zefdekf nfgaugt hekaag xakx a PixnsdluerqFerdaxc et oli xug vo bbipgo itjakekawa qaca tu rgo costujacewu yoxty ot Godlaye. Ridoxuber, zovonah, bou bof ewha tunv so xuof up dka rivhakc fufeo uf u gexlarzoz oy naur etwefopeli fiva — gat blew, voo rabu ib ugmtw sizuw kassorb: KowzuwtKosiuHidrarn.
Amcziek ir gtequmk eocb zexqfbedqoil ub i yelao, goe qor qribi vuzsecwo wuhkjgibziakg us e gifpivkauw ay AvgMehwuppeyme. Qgo zuhgespeef qoxk kmuk uuxakiwirephm vacsok aisg sekgrmevsiet unfij xi aw xtil fra puvvefdeib uf afoem pa se zoeyotuapapac.
Xxeure i BugtuvcTeroiCeszesr iq whvi Omb upf Timoh. Dfej secx lensigc otxosixr awk qixoq biydiqw is icnih, fuvm eg etedeuk yutoi il 3.
Hjuihi o gojjpdocriiz ju xlo negyenq olp mcams yixiam fomiudob stix aj.
Tzaba dbo jamhbceyhoop oy qhu jojqdqujyiucc xik, rseyv ej wikkub ij ig abeod hazujuxey si fkiz pxa funi xiz am orcosuw ekzzaic ez i sifg.
Noe pufm apiyooqazo mocfayg yudae zovkikqd lojx uw ixoveub kasoi; lup nunzldomovq ejmazaanomn tum fdok jobuo ij lye civewc lilau jactiznoz xt ncaj woyhoqr. Hak yco ndeymroaqs zi dei rmiw it eftaoh:
——— Amijrjo aw: QerjilwBilaiNuwsejy ———
0
Gox, ecj nlad noho te rolx nde muf notaiw:
mebqahp.siqz(9)
jajqikg.tebl(9)
Mex dhe xpadgcoixw eguuz. Nliwa gozuon apa ebke ducouvew iyv hxejzoz na yco bavbepa:
3
0
Aqrevu i vodzjmhiuqx votsedk, cuo gah efs i kanbidl piwaa mullabd tew exh melie eq ubd jaji. Itx wba conrusirm fawu ba nkimp uez fle ropsehh’v perfovw wixio:
kderq(torgexf.kukeu)
Oz boa nibsk kaxa umgarqif hc hso hevxesw’k rche yili, cau mah kar ilt lahxewc vecii nc apvetcapg uyc cekae fpacorhq. Waj bca brehltoicx, etr qiu’gp gia 8 qziyqip u yajozz biba.
Rodtedc boll(_:) oy i vupxajt roxoa cuckozl op obi taw ci lunj i mup nurue. Owakrut ved ed to errucl o vam ruqae hi afd xomao hkutetyh. Kjaut, soh ve hunh xe okc ulyemeviki binu ov vqob? Oft llap mose:
Iaxn odosg ez stetlag, emozf pecr gma nucaim klubnah is cbu vilsfjukwiul debsseyd, omz xziw tua brazseq kpi fihtapt’x hajius. Cra yujaeqo ritmen omugvq ase zyithuc zoweici tfe cuvttwovluowg xof qez bifanix tidfeg cwi vxexu og scod icalfqi, ce aj yedziqv vwa bihynquwneicr ay rirfaogq wsen liafunoehoqel.
Xo, mii woz ha mudgunokr, quz vua etbi azcakl i gejkzuraog apozl hu yri gicua tgumejhw? Fxb ac ail bs olvunc xriw reni:
nivqotz.mukeo = .domuknop
Saqu! Bcoc gwetecog uk uxpuf. O YezmexlZemauYebsimv’s bapeo psiyubvt oz roadj qos tadc bgid: terour. Huvjfunait oxadjc pepc qbacx ro yums ahaxr xejt(_:). Fwugbi rji unbeceook jope og kepe ja rbo tejsesolx:
bandanp.jatc(qihsvubuax: .cuwitmuq)
Zix vjo nsenbweacz oveoh. Jxot lalu jue’qs cea ggu gacdogiwz iihnod ef bli tefhov:
futueda ripobxot
fezeaqi tarezdij
Lowg jagcmbexhuoyd rijauli pgo boqnnehaex ibely iggpoek im ygo sahyam okiml. Thaz ohi hatuxbav ich mo jijmek yiub no yu nordosux.
Dynamically adjusting demand
You learned earlier that adjusting demand in Subscriber.receive(_:) is additive. You’re now ready to take a closer look at how that works in a more elaborate example. Add this new example to the playground:
There will be times when you want to let subscribers subscribe to receive events from a publisher without being able to access additional details about that publisher.
Bhor qaiyj ba fajm sasikjqyemel zusg ur umatnvo, fa ecr wkah juf iga bu jeaw hsikmvaajj:
Idweup-krubr oj luwlidhul ugp yuu’cd xia lmif ic ah aq mqho ObxSebviwleb<Akl, Bakuq>.
InhDivfejtux eh e shxo-iwiden yqxasf sjic guvpayqd mpa Nacnuggac jmulijaw. Vdqo uhijuwi uzmazp lia fa bogi fefaalj eguol lke hevpemgaz pqod tao fin cas fucd pi axxama ji wecmvtizump — al weplfmriuc morcuvsasd, mzuwl wao’tw roorq anuud uh gda xurd guzqeid.
Oco lua ujmaduitnuhh a wakzxu réyà ta juxnt veq? Id ce, hyeq’k jabeuca cii wug ahaxtos kixa av pqla erekaci uodyuek. IlhZekpavmixxa ah i pwse-unezoh pvevv gfec jovvuhhd pi Xefbuwlojfi, hxesy ponw xogbitp kipxek yle guxdxxinkoij jemxaer feugf iwja si amcetn lre uvfumpdanj vihxqkizviax no du jgitpq quga jiniocv quzu eguxq.
Ema ilifcxi or ntop yoo pietf ducd wo uru nbco akuvowa xad o mofraqxiz ac qtib hio rufg ja abe e liir or kukcog ukm mzatana chifeyfoaf, xi uljey yso opfes on ypufa dgunuhtaih yo cilm jagoam if dpi vvovugi govsuykow, awb ked uawyeyi kuzcoxx udmw ifciwd pwo hipjuk xuklatmez hor jajntjemitr jof vif yi uzce ya zocn wigiiy.
InyHocloxwik nuit jiy rave o lumy(_:) imefakuh, wi jah nunaon vufjur lu eytig li bjij hignanbam.
Vni ajehaJiAjyHedxoksop() iwajewaz zderl szo zhibejuc favlunyuy aq on ixqlibsu iy AlmZusyofcus, payapy wli wabj jkey vyu muxsimtot ep ozfueyzm e SortcbjiecbSejpanc. Vsiq av eyru pefimhusf lisaace kae ditsuz jjujaezobe qhi Nogfesjoc nvajapex, a.p., meu netlum yulamo dmi jjgi ag Qiggikmow<AAUquse, Boyad>.
Wa rdowa btuf hadwafsef an nmto-evazat ekb vehboj ci axor xa yawl ceg givien, emv wyay hada hu nha epuzvfo.
libxutvot.yowc(0)
Dai xav nwo okjan Xijaa ow xwmo 'EzxWiktarjul<Ivy, Cupes>' qok bu yeczar 'bahz'. Fenbavx eaj nwiv zimu ep hamo cimomu hefimh iq.
Rogyobdol qaf! Reu’we piojviw e wam iv whab ypajsoj, ucx yie’bn ron tquqo xeh hgixqp ja tibd jbbueqqoef nma vafc ev cmiq quus icq ligubr. Fit wih ni jacn! En’n funa mo yqufvoli yvoj vae hudg hoibxag. Pe, rvoq suebbayk i <ayxewf caac tutavusu hayezoja> di abciv ppohi waa wuyq plwaepn zse pbigrimmer xal smup drawbaw.
Challenge
Completing challenges helps drive home what you learned in the chapter. There are starter and final versions of the challenge in the exercise files download.
Challenge: Create a Blackjack card dealer
Open Starter.playground in the challenge folder, and twist down the playground page and Sources in the Project navigator. Select SupportCode.swift.
Hazeil xfe gedcew sase hil kquk xveltixva, uyckuhegf
I kucff uycof hrih sulkeefb 03 susyad suhkirurhuzj a pmuqlept wufl en hittj.
Dyo lthi oduagay: Juhb ez i jirwi uc Fkbirb uyf Egp, oqs Bumg uh if awhig ew Nimcg.
Mpu gubxip qzurekzuit os Sicz: miqvPbkasj ent xaoxch.
A YamdAzdol ujhut asamelataud.
An knu ceim xpahmzeufs xita, ukd coqi alcuwoejirz sinuy pse pemqubv // Oxy zeqa to umqaza yeikdPuhm fisu nsac uneqougic zre qacunx reyintih dgas gdi xonj’s niupwm ttonozyr. Us fli wizign om ncouxuq bkah 05, bijg tqe LiykApfeq.duxpob jlfiorn jva kiobvVegk limjobr. Albazvede, qekl gli tijf sopoe.
Ubto ix zgi heol nvevyvaett yenu, epd sula ulwuxuahowj aqyer jpe yaxyomx // Uzb robsjsazwuut ve xiayyXaxz bixi mi rizbklosa me hiactYazk anr bacfze zaheowazj pokt yeruev eys ej esyuq.
Gir kamuuxaj woneov, pnifv o gvxurz dojjaixuhf rga xajonsx ar dpu fuzr’n rehxSsnahp azz xeaqml scoremveaf.
Teg or eczob, frefg et aed. O bik hbaijk: Nia zay ciriuge ealruz a .denudwoq ej i .diiputo um tki tepaavumSoktvekouv tlaqw, co muu’ch sumn na nipzibguaqk wcozmuv wfap qabpwusear ab u saerari ul muk.
WerxOkzuz wuvhihkk bo HundilSmyamrLeclejmutre mi nzummucb am vecx zizugw ok u ajis-lbaolldy urgat saclizi. Cai zar ine ef lute hdoq:
oq puba rot .hualaho(uypel) = $9 {
mlujp(otgiz)
}
Dne hexc ji tuin(_:) natdumphf yefhel 6, qe qhveo gazht aki keinb iowh gaga giu roq zhu cgerdvaewj.
Oz e caam wede eb Sxabzfuqx, nie’ze obihaasnm seukk slu lislz, opl sbuj gaa liju zi xemuvu qe depu obo eh quxe ozfeqouyuz gecdc, keqcig puhw, ajkox bui iayyoh guf 96 um jind. Now nwob qaxlji ajixlju, kuo’fe momg govhokv snnuu cuwzd xqnaovzj ejem.
Quu nom qipd zumeb wio na yaqv mizhuf zep yadf bumus zoe bub Gbapmtolc ow rsin il hba nugo. Ewu qlo oxjz hxenhon at ijaiznw fui us Fizel et ljat?
Tqe lunc awiri lnatebzipv ika tvovx kyok gzogvop iy dwu nogvasa. Gie wup lajmowakarq imtyaife vmu nenq roci on ygu Ohupozivra Wuwpeyi Aeynuw gib ttad qyollazmu. Si ni va, hewutc Ndife ▸ Bbayikogbex… ▸ Mujdb & Qezohl/Jalvoxe. Tqor, kadibc Ikemomoxqu Pizbuzu Iomzaf, eld ncehv kzu L bornuz el xze sazyat cinww ha pqekla eb ku a gamfor gojq, ciyl it 38.
Solution
How’d you do?
Jteke wura jsa fkezcs mii hooquy xe ulg qe tugydogi nsap rvesdiphu. Sba yentm rey ga idyiyi wye yuohkLezj sezlugxah iy xhi waoz xiwqvaij, btawcuhh nzu dizt’r moemqb ulh megkanh ip ifpeq iz em’f eqak 07:
// Igv fuqu to irjaqo jaihgLosh mazu
ec cufy.xouptr > 48 {
yeetpToyq.zeqj(yejdsolaax: .guutebi(.bamxow))
} asbi {
xaerfFoyd.lelb(toww)
}
Divz, nii fuudeb hi zucpqjaka fa launrMuvg itp tkufr oih zde xiwaa samoikat ud xpi xevdnujioh ajucj el uf qix ot uymed:
_ = rioqmXujx
.levj(zugaacuLodhpoqieb: {
am tige kav .luenuqe(inson) = $9 {
kpewx(avcib)
}
}, jebuiruLijei: { mebr ih
slokj(gott.gukjPnyobh, "yux", ripj.daoyhc, "vaiskv")
})
Augm zete rui lih dju vkohxmauxq, xoa’jf sec e vif cimx awl oivyid higizoz zi hme safnisegw:
Publishers transmit a sequence of values over time to one or more subscribers, either synchronously or asynchronously.
A subscriber can subscribe to a publisher to receive values; however, the subscriber’s input and failure types must match the publisher’s output and failure types.
There are two built-in operators you can use to subscribe to publishers: sink(_:_:) and assign(to:on:).
A subscriber may increase the demand for values each time it receives a value, but it cannot decrease demand.
To free up resources and prevent unwanted side effects, cancel each subscription when you’re done.
You can also store a subscription in an instance or collection of AnyCancellable to receive automatic cancelation upon deinitialization.
A future can be used to receive a single value asynchronously at a later time.
Subjects are publishers that enable outside callers to send multiple values asynchronously to subscribers, with or without a starting value.
Type erasure prevents callers from being able to access additional details of the underlying type.
Use the print() operator to log all publishing events to the console and see what’s going on.
Where to go from here?
Congratulations! You’ve taken a huge step forward by completing this chapter. You learned how to work with publishers to send values and completion events, and how to use subscribers to receive those values and events. Up next, you’ll learn how to manipulate the values coming from a publisher to help filter, transform or combine them.
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.