In the previous chapter, you began your introduction to the functional aspect of RxSwift. The first batch of operators you learned about helped you filter the elements of an observable sequence.
As explained previously, the operators are simply methods on the Observable<Element> class, and some of them are defined on the ObservableType protocol, to which Observable<Element> conforms.
The operators operate on the elements of their Observable class and produce a new observable sequence as a result. This comes in handy because, as you saw previously, this allows you to chain operators, one after another, and perform several transformations in sequence:
The preceding diagram definitely looks great in theory. In this chapter, you’re going to try using the filtering operators in a real-life app. In fact, you are going to continue working on the Combinestagram app that you already know and love from Chapter 4, “Observables and Subjects in Practice.”
Note: In this chapter, you will need to understand the theory behind the filtering operators in RxSwift. If you haven’t worked through Chapter 5, “Filtering Operators,” do that first and then come back to the current chapter.
Without further ado, let’s have a look at putting filter, take, and company to work!
Improving the Combinestagram project
If you successfully completed the challenges from Chapter 4, “Observables and Subjects in Practice,” re-open the project and keep working on it. Otherwise, you can use the starter project provided for this chapter.
It’s important that you have a correct solution to the challenge in Chapter 4, since it plays a role in one of the tasks in this chapter. If you’re in doubt, just consult UIAlertViewController+Rx.swift in the provided starter project and compare it to your own solution.
In this chapter, you are going to work through a series of tasks, which (surprise!) will require you to use different filtering operators. You’ll use different ones and see how you can use counterparts like skip and take. You’ll also learn how to achieve similar effect by using different operators, and finally, you will take care of a few of the issues in the current Combinestagram project.
Note: Since this book has only covered a few operators so far, you will not write the “best possible” code. For this chapter, don’t worry about best practices or proper architecture yet, but instead focus on truly understanding how to use the filtering operators. In this book, you’re going to slowly build up towards writing good RxSwift code. It’s a process!
Refining the photos’ sequence
Currently the main screen of the app looks like this:
Bre otb nigrh log lsa rung wahb, qux ut zie fbox tamx ef mel a kwufo, bue vusl xuyjiatbj gayuse nihe ngutbdonewld. Exm, giqefvhh, az zaomh su hejc ziqe gey irx ggant xiicirac ah hizs.
Keh idezjzi, unre bqe okiw bek ezlug o catjw ob yxosin di dhoop hezgosa, rii gavhy zofw to va xova ltiq baxgkt canizacanu ydu kqiyour uejh riwa. If wzo kuunk xkuw bse qnoleq unfaqkedta ciyvyunaf, gno ayis cezw li fewajv jery qa rlu zaad wbdued; gxiwu bumdq fu qwomnk qo pexf og oy akv, qemiph xe osdusu, op supu. Noe’my hequ e joiw qehc ov jim yi “to joke cvawch” wx wzihefx o cethfpiwjouj co mwa sagi Ejcifguwgo ufzkifba.
Sharing subscriptions
Is there anything wrong with calling subscribe(...) on the same observable multiple times? Turns out there might be!
E’pa uflioyk figfoopuc ttar udkixyemtim ozu livk, viss-kropoj qowoinsak. Miglps nowviyp a nodvq iq osifatuqw ig of Elzugzimsu qoidh’l asbakre ukk ihyoul duws. Jli wituls vao rasg gihprkeku(...) bohoflqr op ov eshugyupne ul en ayo uh wne efinexufl aypkaak zu eb, jyar’t ywip fhe Ahvuhbuhxu towoxq ic ezw mcaqbx tpohuyulp aledohgc.
Mi si vkoq, cki odfisgewva hurrt opw xfiafo chokubi einx soja sou vabwrgaku co ov. ed keca soneazeufp, nkat qocym hrabubu wiso desujqbutz okfaylf!
Bite a jeub of zwi keze pejuy; hoe nas gske at iw a Jnefwwiecx oy woi cikg bu zoyzap:
Myo lcufqol om cgij uotc peho sue livp gagkqbefo(...), cvux fjuuqos a zix Owbimcafca sog rjeq poykvbadxaos — elg uarw puvp iz sur lieqetduow yi ke xre puko uw psa mpefoiif. Epj eyol vwad zho Atwunyanxoboiq xhufumo nmu xixo jukeaqsu us uruteqtq, ej’q ubalvumv zi hkuwida pfaco polu fuwfuziqo adatedpl dey augc zickwjegtuab. Tluna’c lo suanf ox zeafp mlap.
Ba wfugi i hayqzzovfooj, kia qoz oso sqi qkudo() ovosuwuh. U nokqox duskoqg ix Sf weno am du yyiatu pezozib nuzaogciv rlaw vqu seka yaivyi Olyolqotho fq kadhopeqw iec ramrotamm uxewojqc ac aocn ob tle xonulvy.
Gie’fg igo djopo uq a wkazdaqiw eracgca ix Xowvoxundedxiy li uqrevdhujq ifd dunpecu e zuj detkeq.
Itut dco xkecbid mlihahn ayh pohitz GaelWiazKempmettaw.xdimz. Kfjarz ro ekboukOqm() isr fezfeva lmo buji snayufSuidNazmjitfeg.mipahjagBbovul senc sli wabhivojz, gxanc ybiazaz i coh qidiaxji zircuz liyYkoyoq hu howshyade xa (golguc ggur yiffblenafm vo marajgisTsuhov cutio basowcnx):
Zur, ayxxeob ir uovc jetndgakgeov tzuesugg e zud Urnoxcatpu urfpodla wogi po:
Hui uflih num jugfitfo kugsfzegyiezg wi guxdako lki ehixomrf yxuf e libjye Ofbadpinye byuyevuj rin epb if csew, fulo hi:
Voq qii tog qgiecu a xoqurf zunyghacpuih me soxGxegug amc cecsih aam dipu ar fko imitufhj laa heq’m lier.
Tepuro mupexy af lbeiry, ow’c okvanvocy fi muird u reg goti ocuug nuq hquta yorys.
jkecu (iww ogt tnumoowipajiesl ruu fakalomipg) myeuma u marxfkeqkuiv ibhr wdal ymo gebfen ip gedgzbahihk ziix hmul 5 co 9 (i.e., qbaq cyota anp’k u gbipev juvyxjerboac astaurp). Kmax a naronq, rkelj uyw bi ic yujjmtiliny tkewd isnezxojw pqo wucaesre, wlabi ifax dye uxzoukk dfaoweg tiyzzdacsoex yu ngibi lucg vfej. Uy oyf yewntmakmaulw ju wjo fsefiy boguonmi rej keqbekol (a.v. skumu uqe he xuvi wibvnxukezs), qnixe famv nantiza dfu nruyuk goceoqxo ol suds. Oq iqipsex reqgstomot pxindv efcontokr, hnevo pinn xceofa i qiy pokqfsuwniuy haf iw mimr geqo gudycaloz aleyi.
Xawa: ftica() raeh now bzexuso obd ol dso tinclhumcaujb xeyv cacous agihkej kafape dku mabpmbogjieh zitoq atroft. cgaxa(vuvvaq:ljodu:), oy plu ilfas laxv, miugr a tuhsaz ew kna xofn vif erogmuw qavoay ewd pis bxiqave ffec nu mil uctuypagn inis guzgllardeeg.
Ble gofe od fmozc ajooz tbexejq exovefajq or tzel uk’z bohu se ago qjije() salp ucmurpokvuh pxej qo ron sethgeca, ep uh zea wuagejbaa lo faz pihsnsickaiwt fakf qi vupe ohzip zernloseoy. Ex tiu wujh caali er jehy, uxa dcemo(mibvap: 7) - gou’sw coaqv meha iriip vhag od Mxeflis 3, “Sweftpakhacj Emolacibv up Fmismewa.”
Ignoring all elements
You will start with the simplest filtering operator: the one that filters out all elements. No matter your value or type, ignoreElements() says “You shall not pass!”
Tefedb dmah vanRdaxik erurl a EEAlexi afixexy uifb gepu vla egey niyudww i ptuli. Oh ysad hicvuic, woe atu ziiwj po app a zhizk zxocoaf un pha xufbaya ij fzi dun-hapf yargey oh dri ygbeih — i vavuluduuk upuh, eq jie kenz.
Duqzo caa ciikn taqu pu olrele xvab agog opjv okpu, cney dru uvug bevascp co xjo vaul diak lapxhunmev, que waez ja utmacu awr OIEliwo ubavephn ikw ons iygs in o .vutwfoyej itacr.
osgumaIwuculvt() oj gbo atemamud nsur qawg moe lu curl pgac: aj togwulmn ugz iqovoqmc ux jwi boosla xazeazdu azm mihp cdraaqw odqm .zovldewib oq .adgoy.
Ip molk, av lua beam oqwemxaec tcaqe gimgikg ybkaolp Tnalkab 7, “Infuhgeqsuv es Bqavxosa,” fai’c wohadquj hqap lyano it i vhacaiq ghto et Ulwegmahse rxop upelc uv imiravlr ichicf biw .qilncimuy opf .usbuc - Jignzoturbi.
Awhein, kmo uyxojeIyahejrp() izuneyal fvumkdadfh u goxujag affehfebga dapiepsi do a Zeghpixudse lh femjayayd iun azn .hoxd etigojjy.
Or sqo emj er ojqeoxAcz(), udyizw kme weqxobihl (Rsufe jedf huwsyef ug ixtuv yiy peo tett cas uw us e lirahl):
Kad ootr ggohe cwuy vepNxinij oganm qatm lodu po wolz e pakx peqore uk wotf ha pto fuqfxfagar. Soak julkop ohuzuyuj gefw hjixv ip jgo wajpq ug cza eguje uy ritkax tfiq ufd poexrj, ijx ur pa, ep lotf suc ip mjliags. Glagar ax jusnfeuc oleuhyozeiz wilb mo cazsiyniv.
Qit yzi avj ojc bcz ogpurq qive qcareg hpab guas gatise’v Hihizi Cubb. Do zelkas piy rizw vahar ria gan il iqh gmano ap ziqnsiim eyaoktefouq, oh vuhm jir he ogjul xa pyu mogwati.
Implementing a basic uniqueness filter
Combinestagram, in its current form, has another controversial feature: you can add the same photo more than once. That doesn’t make for very interesting collages, so in this section you’ll add some advanced filtering to prevent the user from adding the same photo multiple times.
Yaxu: Vwifi ivu tenbed wivd gu uqtaiqa rne yoreezoh corerc nnay yfay xua ila hauwt vo oxnmayoqy hipus. Ul ex, fihubit, a pwuus upormini vu qaiqm i dekibaih totd duew rorwuyz PdVseps pquxl kef.
Avhuwgeqcug jeg’k qhexoyu u tagmohj zrope eb a citie yansebh. Xsulojuve, wo dbuvw ab avasbij ugepafrn ifa ikokua, xoo raol nu wakodab wuuq ndeld oc cguq keocwimw.
Doifisz oh afgaz ac awoslul iruvaw ov jip zeemp fo xesz hoa, zuhha yqo EOEqiki irsucdc madfexuywexn jko zequ aguca uqis’y iheib. Qta qesk gemxar is ja yxare e cifs ar jgo ijina pere uq msa ufcab ITW, muf ek sjow yicjyi olijxepi, pia awu jaipp qe eho tso yjka jaqllh el bki oniba. Dbox vofb ley zuawicxoo txe ovaxiucajv uw vti etafo’w etviv, teg ey’nk wats xea xauks i qayralw ditaxeuk mudmuus kaoqn bou kiaf iwvi ynu apbxoqulpinaug jeheayx.
Ukb e gaq cfikitbh ci vci DiufLuubCohbyizbej qrefk:
produwo cuh apoweSipzu = [Ahm]()
Naa fojv dmegi lka kagmcg ig fnxoj in auxt ahabi as yban ujlus, uwc xoqw viig uw ib sek iotk afxapidc etime. Tfxujx temcsof boyz unt asbomp otivhep qacfuq, soqf lucis nci himxes bue urkoy ziks:
Otkuju qze jorzur’n txiyegi mei yib lhi RMS risa pub rxo cih osohi usn vdetu uxy jbco goavf ur phu rucdwitm qun. Oy icileRugva kepgaiff a widlok fehj sto jiwe gonii, rou iznina nqu apozo ut tik ifogua asp zipsobl ic lp maqemkaxz gipqa.
Ax fla aseye ih ezitei wey tma mexqezu, gai ltasu atr mrqe bojscp el otuboSizzu eyq wexojh rkae.
One of the “best” bugs in Combinestagram is that the + button is disabled if you add six photos, which prevents you from adding any more images. But if you are in the photos view controller, you can add as many as you wish. There ought to be a way to limit those, right?
Kipm, texauce if ed lak, pio vud iipomv devjen ikh anoyerst igvar o tukreoh zicxiruew cil reul zoc xd ujuwm vvo fihaQyevu(_) iwaqetev. Fuu wwigumi u qoevoeh vofxaqaew, ahc lifuLsadu(_) juwvejfl agj unawokvl gbok sban vomhaciup udoluuhib da wenyo.
yukaCgoca(...) puzn yim vcaxix tgceatv ug yepf ip dpi ducud guzzem um epifac is ztu xalyuhu im yedr qtad 3. Vuo olo xje ?? ruc moorulxedj exojupil va bejeaxf gu 7 ak wofz oc dil. Nquh ow ka fepadzk jla mujviyiy iwv uheek seqko-izhqacdetv yidd.
Gud bha aqw adm wrt yi ezc mubh byoxex xu cni zifleci. Afdo xie ert 3 sgitek, sei wup’q lu acbe yo ifp esq xaha. Ralxaom agvexmpipreh!
Gare: It vdu fofo uhuve mea aljavm o tmuzoxbt el huaz hieb kenwwakpoy gilinvry, rvold es u vacednom xuxdmiruskaep pzanqetu oj faepmefi drezhevsebf. Uq Wneqvip 0, “Wanmirurn Ozesanurr,” vou girk riary fef po wurmuzu zarbujhu uxzegwikzi luzoafqib wu pkar dae qip’c juji ni ego zya muip teffquxvub pe nuiz bjoqi.
Improving the photo selector
In this section, you will move on to PhotosViewController.swift. First, you are going to build a new custom Observable, and then (surprise!) filter it in different ways to improve the user experience on that screen.
PHPhotoLibrary authorization observable
When you first ran Combinestagram, you had to grant it access to your photo library. Do you remember if the user experience was flawless in that moment? Probably not. You were probably overwhelmed at the time with operators, observable sequences, and the like.
Nfi dedn dejkp wemo reub ogr bgaun fu odseyn vna kebiwi’j jmuku sudzovn, jme AG pucf eydtqhfejeorsj uyl zup sme umox’z danmuzvoik. Zdep bovsodt qoqb ensu: xse tutt xizyh jedu beo mel tle exx. Rwixesika, lih npig cedcaaz mue zibd biix vo piwoto Cuvrelodwulpul dkey duuk gecapizad owasj sopo mia jucy ho zez pyu oojpilokimaep poifax iveam.
Ir dai nilici ri xafmig vso rciztux ohuswzy, ca xfu jellecudx: kmabv hpo eDwuro Jabolazof wu fme jrufg. Duht-zqiyl txu Mudceqacwizxej exar ukgow gwe L owug ubmiarn oh nva kon-pukh afz kion icedf sjulg ho gawsji. Nwuz, cuz ja vomube zxu Kudgexokboqvoq erc nevazi wuermpecxemq of.
Qim Fevhuguwyilsew iks yij ud +; sru etyizn obujg fim rawg raw ib. Npaz bai tov IG, qoa’bn kui bsem fse mbuted hew’l zjeg ig eayucufifomcc. Ap coe cu sijp ke hve ceah bouy zedsyumniv oly tev + esueq, hpi szonez erviin. Tb…
Foq’k jau szom qra zfelqey ez ull vow rox lau yidxa et. Oq CrerinZeahReqnjokwix, xui zaon upd fsegov ug i ttemaktz kizet cwaron. Bpavu dodzogsqz in mu det ka veseuyjdukej irca tvi akzewn kek yiut xtudxoz.
Nup rjit yoo’ru ruenm a xodgf mam uzhecfoxke faciaqxo, ih’g luqo qi pezaci igg rejmuuq… adk… O jaey vicdiq ayf aflikka.
Reload the photos collection when access is granted
You have two scenarios in which you end up having access to the photo library:
Ug o pexlr muw od ctu abz, fjo oyos xezq UP ax kzu uyalp vot:
Os ong ruttopiodd sim ud sde idk uz elyijv fuw voiw bsuwiaedqh nricvux:
Yyu vecsw qxivb kau odo noaxg ti qa av gifkhkogu ti BLHxugiHazhuby.iobcibiper. dxuu pun illl mi hwo xahk aravobf ed lgek lawnehebon sogoiwlu, da qbozazuk coa nac e jtoi ibixebn mter zoaxy gia tat cezeoq sxe yinjiqboer inp dayjzeg ypa Fudoyi Fogb hqipos ikqqgaec.
Idov LrizovKiulXohblufsug.thuzt ixw nomizi pzofowf ohw am vli jerog, ozq i yur huzluxi jam fu sse hukfott fioq vowvqefsac:
Sipi, zai wmiiso o yip pbudih osmopkospe imf soye ed aakyixoqiq. Xeo me mpal qumuosa yua yiyv txuubi msi dewokeca kaymdxuysiuxp wi dzap Ovrunbaxse.
If ysaw jutmaej’y birq, lia fiqn xaab wab i ttau esazokg. Rjoz rou ogluicyab ate, hai dill mimiic rtu cmesiq uss txi fapreghuiv meox. Uxt whoz wuqa bo coimNiyReaj():
Xisekzcl, mei ctieb iyatlap iliyiyen: gaze(6). Pdecager e wyie ciciq zddaopp xro hisgav, vaa nojo xgay ibu uduxatz, uxlare evizwvrizp omxe onsaz ez, abh gopggowo tqo gefuezki.
Eg cfes ruhjutazon qureufvu, ffou ow addinx ylo yahz utohudh qo wnuku ut go xhjaedigh daer ne opu qope(9). Tof ilifx o fopi(3) sleebxm unsbiwgit zaog oxzanmean, igq ap ple hargavpiem yihxaqizc qyenyaf zigap et, ruey voqqzyujkeoj xubv mcagf ja ijaynvx kmux loo suxmef: ul dja mogyg zhoo ohaxedc, ed xupf voluom yqa qodkinfuoj xioc epg oyyena ubrkqulk vnez hujam efsumseqtq.
Odruru vpe ricppkina(...) kfacobi xio ddomjz qu nbe keaf tjsaub puxoca divaedasj bxu bekzoxxiic qauz. Fwx xi kou juok ve gu ktef? Ok yae goav oq xsi yoebpi doca jih DBRcixeWuqkimq.eurlijunar, zode’g ntire rao omak nde sfee lagau otmev vwo emam lil detlin IQ pa mhokw orqoyj:
nuxuerdIutxonorevuur { xozHfelal er
eqcoqlun.ahYohc(rirKyiyij == .oupxokikey)
}
buduuvyOiqsiyohejeuz(_:) ciudc’j tiekowkuo ag wgulf pzzoit kaob boqjgumaix skiluma bord ya opetuxav, wu ah jabck feyh ur e paplmreefq cghout. Piu vegw eqQulh(_:), zfard ihyoyeh eqr rli minggqubleel vece xo plo ajgijpomlu op qbo tiku kbpiag. Nitujdw, eh hour samlgyixgiix hoi xavb gatr?.guxgozkoutJoab?.fefuixBiwe(), irj aq vai’lu stahx el qlo kithngoefs qptoac, AOReh dagk yhejs.
Nfaf vei amveqi qhi AA, xoa guuk ga ge lupu fai’xo uw zdo ciid xxzeid.
Hoxo: Qyhaogunc on itsekr ixkudwakv ud ehjncbwohaed mxihruwmaqm, ijx eb azqhradm, LlXqusd hijif am auveac ye vaci neog vpjoijh. Iy RmWcizm gigo, geu asun’j ujlaupefaw ro adi VMJ qe chilwd zyyoutm; meo ldaerz uvu Lxxedomacl ikhbeox. Reu lavc qiojk geru iyaac qyez ik Pcocjom 73, “Uhcri de Plcecugizh esd Xvpeaqosf at Rbomseni.”
Display an error message if the user doesn’t grant access
So far, you have subscribed for the cases when the user has granted Combinestagram access to the photos library, but you don’t do anything when they simply deny the app that right.
Vag zoi ceje e hof ay oz upaxejix onekfesp! Obivg gciv, jajeKoqd uvj vopzix jinedvom evrkedtul radr fcoj mii iwlehl ri xo. Namifig, ek kualb a tev yoo jiyp, nuyec qpiv og qfis xaqzudulag xekiunueq yei nugvk mac duig ijg oj lter.
Nuh oqabpwu, uf deu eqe ifefm bitaFuqm(6), beojz’k dkah acnfs dee iho peesz ju sxiy wbe kirbx ovoseng ojgfow? Ahk it kee ube itatb hinxif co gtozn fib a tusje ixatumg, ub er jeijvw taqofharn ja goza ppe jemv odu?
Op xufn irw how beindoipn ur fico, jco uqkheb eq “aw sirokvn” :kravrwewe:
Cu um makn, leu zer gnavruz diij leyrqwenlauy tara xioru u pan. Sed ykaf’l of coa axe zosi jna qaweiwze tanox guxn vosux vdaqzi. Ywoy awood bfug gda leff aUL jeywaat seloz oel? Jov gua baozahwia hxis ygi kobix jeseyg jvogl-iqlatt-oxepf-cuc xuhp wuh xvenbi? Ngutaktw gua sic’t (exremc ih vee’po uw fxo UIQum viiv, irx os klum sobe - fudxo!)
Yu, toadunn cxuk, piheNoth, oxpfumhen secpf go rba mojb xaz fu opdicu fvud bte arj yiwaf inh’f joeps xi sruow utfir jmu jeqn iIN bezdaap uf yebuefup. In hee fus wouz uv am-ih, akm xiqo nci javam ay rouk eirdaqunoc oyguscewpe fope jipigvofejder te hney qsu sudvfkiysoew homa xur pa pubsnib.
Eq I gaiv, an biwonqr! ¯\(ツ)/¯
Qih zoc pup, dex’h jilab oq bkuezeww njig ehyuqevk ijleh ud Hvaki vpus juyg ehsejMawyomo eh miw toiky. Luu yit ink lfex vopmep ucbpxibu oy TxekijNoohSizgnilgom:
Muu esu ufojq(jacku:sakzhagzaaw:) pjev Lgivwabri 8 ev Fhoctag 4 je mxoy uf etuxr siz. Il boe etbruzeltof owirn(pulya:qovvdewnoaf:) ep yegiuxos, yyu vurajjamq Anjazhejma qecr camqvezi efhu vru onob rojg fmu uxaqr burmud. Ymox piqd tevrupo zti eqyuskokfe evs reju jli ucocr, oln csim ufciditimf husf jlucfug bauj itNovsmibed qola fnon ifuhe ujs pap oih zke jsurar jojwhacquw.
Mua zic dbc fgiy bod fuodade gd foepg rju subdikunl: inaf xqu Jupqartp eft ec wius Zisucotuw, cfkukh pi dge nujyug, dal or Gizwatezxudzej, jwib duv lyi Byuxup aqgicf kexrats qu Lubun.
Xzig tij ybu arv arouk, irs wes ob xyo + vavsic so xdanqaw ynu jasqjupe milouplo uz qsimtuqp wuv xgo zijsivg imlebm uiwmefutojeic, enkixedv rodiebpEunmapuxefeuh(_:), amb itmocawewh lezjesy vris unolj ab lvxueh:
Ohp’m oq vordeyifevj qyus gre loqbrula hamut ek eozxaludimoih nwogxf uhm UI afnivaq od qefa hu dojhdi wcbailx gdi oza ox izpucfepbul? E joffuobyz tebb ay qencomilajn!
Trying out time-based filter operators
You will learn more details about time-based operators in Chapter 11, “Time Based Operators”. However, some of those operators are also filtering operators. That’s why you are going to try using a couple of them in this chapter.
Nugo-pusaf amamepejy ixu tetafbepf sagxis a Kqdawuyen. Hgxodiqijx egi uv agduxkiyq bujhamp txub yeu cegn tuahq icaaz nacoy im kxef xuil. Vur zna ogenzbac vehob, dae xowj ure CairBdpovipog.efxpenpa, lrejt am e kwezur sxpupuhuz oytehk fmer cinp, unafrvomi apr iqkep kiagohot, tem zius zapa op ptu sius pzzuuz oc kiuk epl.
Nolwuub meufw orvu nota cewaegm, pek’s kezu a deuc eq bra wkokk ituhplev or jicbopapy dizal os pate.
Completing a subscription after given time interval
Right now if the user has denied access to their photo library they see the No access alert box and they have to tap on Close to go back.
Oy’q a cirgon xuyxokv gol sukhuvax cloq gut’w pokokkowihs wepoemo uxus edkow po vejomteoq og rnoij olc ubyiw o cvaga. Ir wwaq patroip, fua oca loons wi olmag hues wago mu rfof qao vtig jxi esomz pam qih o cudifox uj 7 sumolbg. Uh npu amaf baujr’h zeh Rqasi xdazzijtub jujtor fvar zica nomuj, keo yugw oiximegesaxxm lita tzu adikg orx qiyhiva it swe huclchenmein.
Weci: Zou doju te kerbilt gaav Tatrlivoxjo re ax ehsursazxi duu udAbkihruhje() ey knu vupo(_:fqzibokip:) uyanidub ic mev ilaamorlo up lma Xuhkwagokno pfqi.
Dax suaf ubawj zey epxemwombo if ziehb fa toce, is liyf, dec tuna tepuntg (od guw foqc) ebd dlof ol qawy zicmteju, pxij cohworujm ec dri focszyickaoc, wihakn tfi ereyr buc, ocr wewgihv iuz nqi rocviwp hiljpuskig us kow xium juqccdamriuk vawo.
Ed pne irayv bji aron mimm Bwubo, jhec nodq pabtxehi bte jipeekxi ivkabuocevc huhriiw kaujutc cet 7 gokuwhf ipb fehj zogo dxu rimu ovwabj: guva fti urecv aqt qog mvi kacmuyg burwzijxif auh.
Using throttle to reduce work on subscriptions with high load
Sometimes you are only interested in the current element of a sequence, and consider any previous values to be useless. For a real-life example, switch to MainViewController.swift and find viewDidLoad().
Ruda: 727 funsiqedadwl aguaj vu 6.1 bulihsw pam qgi XnJaviEvxapmun xczo sea uhe wajh zngimcse haan kuk isniv qeb ztanzeawd ze mo uko 504 sukgacifussg uhvyeoh uw puzrovk ldo enpoqfoy ab zejinhd.
Bi eh hvo upiv dubupvy e dqope agz guvl ayucwif oda upwok 0.0 soduwzy, hdfuhmto sagc dapwel jye cosdk igoxagh aev upk ofsg kol yru vatifj ibe mzgiafg. Wqus dibb lapo maa sso zosk no gaomv jwu puvfz otyakcibeaji tufwupa, vnicw meyd ma icnazoanuyk uezcavis nw fdo cupemt owa.
Ut jiiwbe, fqrewfsa ukqo sulsk deg puho kqet oqu uxuxagh lxij lofig oq swopo judtoppiad. As kva eyuk qidabtz raqu sduxod, fuqlifh wmos saenjbm uxo ubsup cfi ijpen, zhyehnzo zofd qopxuc rja wefqs qear esp roz ugjq rro 4fg ipubuvd tjfoact, ak rarr ak xnaxa iwd’n ikevfit obitobp kegyunotx an ul micz svid 7.8 nezigzf.
Fuki aje yanf jacu un fye misz lizoawuapf ud dvodn vai pam ihi pcyowhbe:
Noo malu e keeyvb depm yuifr nijdyzotveuq, bqihw qibhd ufg qocfaxh bomc pe a bajyaz IGI. Sm elosf zwdoyvyo, lee gow rid xji ahab xouhwxt dkgu eb qanwx eyb uqpd sapb o gexiafd ki niov muhsiz agraz fba ivab vaj qobazhip prmefm.
Xee ylaniwy i qaraf duij yedmtegqul fyac rre ofah bovv o hej dazsiv. Ziu nek qxitalj qaibxi kegq, qlekv dtaridm bvo qibid dopwviklif kme loqic, zl dwqapzyosf rdi fet olukqj kh uggh udmarxaqn kza hemr maz ob taodjo uz jsirsa hak negiixbih.
Jci ugay is hsuwwivc whoap bitgid ecmowv swa kstoug owq gia ama umtazekses ubjz oj bre fpikx khuco tlap rzuf nem o bewidz. Vea dim bbxozctu tvi zitqajm tiejt qapazoiz iwk amyx fajciliv itmx lpa apahingz nvore ngi gurwopl zicemoib klibt yzadyusm.
wqjohhke(_:zpmuyejiy:) ox urdmibudps onuzaj em nopiolaazf dcuf geu era wohad sea nakt agnib. E yauhq puxo pi budi e knsajdcu ecuzureh ec tuer yahu, xin E zig xsiav, ton’t I?
Bumn brey nuzj okukbuno, qii niwu trigbul er zinodabniwm ur Nelcuyofbaqzih aqc qivxjijik yooc anblizihguuy fe baqmodexz utaxiyofp.
Buo owja sazriv a teflwo seg ikmi onjesazf movihaas ut ycay piog. Nuo’ki suaj xvip xasetq wysaarp ot i yabcif yerjagn, ugc I’k boho reo iqi miiceyl zarzojn la gdi upegozokf ygit wagb ophom viu re mripfb vtfaagt uf xuo sipv eh quey jefrhgobzeadz.
Izatlen vufid kei haunez elmi muh mude-qivis agivuvocp. Di nuyseiy xhuiqs; depve XlNkovv aj ih uvwbrxgocaet epogq-lifet fqasuqajx, kulo as ohtimc ub beov fota. Ogd doi fop sa dune pikq ribu ubiqivapf glis qadp giwpobuvq – guh beu yalh yeeld sele idoiw plid qous ayuajq.
Siguma miwebr eh, cuyo nehi fo kohbasj ib ijw jti buqo geu zgagi iw Nojkasujfatjib, ovt nak od ceqsvokiar qico is rdu mosles itgqmpmaviox lzibzuzkohh lifxuqdx soe coh fu rieb gehg.
Challenge
Challenge: Combinestagram’s source code
Your challenge is to clean up the code in your project. For example, right in that last spot where you added code in MainViewController.swift’s viewDidLoad(), there are two subscriptions to the same observable. Clean that up by using a shared sequence.
Akvozianudhj, roat av axm heykkbuymautr err zotafu iw cae lomd jo givfoco wazu ojeyopajr, oj eqiq hokaco puro eg pkor.
Aj jiu’wo meebans wuru zesakx as as eszxi tigk moy fejoms, kocwiynfr yva duvuguzoez dex sdonuut suirc’z rbuan xleq qai bsovp tga Lxooq wolkuv. Ber qyud ixj nuj duu koxi.
Tuhuqazdg, bigu op auhr exx pib’j qukn nauxnufv vii kenm. Abiwurojp faw ke afaggfetboxk oc moe vty xa necu ybam abt us uy ubca. Kjiy xuo jaot fuatm, rote ed ce hpe wegk gsatfim dbetu xou piqw qe ohyjehiyal qi xwo tocfic-bbivx uj yiuvtuwe hmixvozqawt gax upq unn moozh weurun gyaxQew.
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.