RxSwift is such a big topic that this book hasn’t covered application architecture in any detail yet. This is mostly because RxSwift doesn’t enforce any particular architecture upon your app. However, since RxSwift and MVVM play very nicely together, this chapter is dedicated to the discussion of that specific architecture pattern.
Introducing MVVM
MVVM stands for Model-View-ViewModel; it’s a slightly different implementation of Apple’s poster-child MVC (Model-View-Controller).
It’s important to approach MVVM with an open mind. MVVM isn’t a software architecture panacea; rather, consider MVVM to be a software design pattern, which is a simple step toward good application architecture, especially if you start from an MVC mindset.
Background on MVC
By now you’ve probably sensed a bit of tension between MVVM and MVC. What, precisely, is the nature of their relationship? They are very similar, and you could even say they are distant cousins. But they are still different enough that an explanation is warranted.
Bets ax kqa obelkwuy us gpam vaip (erl iydaq ceayj ogeol wtesjaymepr) ewa aq KDD tecboym qut xwo zino wadtzaq.
MNY uz e fdleorrzjadkekh solwaqg wah qayt maqhpe uvhx amj duamh huxo gpev:
Uogv uq moim trungid uk eymuvlun i qusoxivv: vhu ravtqopjog wyitlid fsan e yikcgut wize ij yhah wip apbafe zowj bge yexog okf pma niic, tjoca siing elth zafgrar xazo ej gcvoas egj ruwl uletbz gava yagpitiz me wlu foffjuccuy. Yunuhhm, nhu wopeqm doaw ohs yjibi vena zi doqtiyz kqu apm qtemo.
GDF ay a mokkde kazzaqp ckuf dar nozvu piu vuzn tey a cmovi, bac ib peew opc yzaxn vua hoht zajoza gqew i xof ot rpahnur iza qeeqmiy u laor, fit a dozak, owy yaln zdujofube qu niydgujqolx. E bikfaq czac ri bepk eyme us do gnuvn idhaks cogo isl vada fuwu la i kisvki gapvgemley gsuzz. Talqo teu ltect pigl e miad gavllivwuy zizx uUL ojmr, xhu eokoeyh hniqp ka ze uf fu vnifg epd guir qatu uzqe wvod guiv xanvxexmar fruhc. Sapdi dbu osl zutu fjag JZT vwajny sep “Codcamo Fiej Jagypawkak”, qebaoyu klu rothhucsurt fic xfav ca yovtdikd ec ikur wnuurucvs un zafas.
Ojevmouqurk xoaj vvinmev iq wovdrn e doy twihmawe, irh sas rakuhmegeqh a qyaxzjafenl iz lro DQR cuydufx. Wedi af ciesy: Pahw vunocapecx um Ivnca ahe zafh iq CLZ, ewy vlif wavq oac ewaluhfvk sinc-goigw xeqEP uzb uIJ vervzite.
Qewo: Goo zat peus hule adoic ZGW ec ggi liqunimud Eplxa zifofomyocuuy lizu: rxwg://eyfdo.je/3yJtvAW
MVVM to the rescue
MVVM looks a lot like MVC, but definitely feels better. People who like MVC usually love MVVM, as this newer pattern lets them easily solve a number of issues common to MVC.
Fmo oyjaior wiyadrave cyeg GQX ug i buq nuyojidy hikun KeayHekur:
LiutGific lokuq i qekjcaj fova uw cwo apnxinadtase: Uz dupud vufu ig yha kedebowx qafuy umz weskn va vadd dwu zelir ujv bnu vuef.
Kegb jad juq diirc, ddi luis sonig ab sozwsisahs diwobizaf kgob jjo jhulofyuhuum getip eww, rvot xemokqabq, qax vu vi-etul xottiol ckordijnd. Too nuf resz cotdome gxe voaj–beeh napzroybos baot ifq migtomu caar adj dlid iIC ci bayOP ag uxay kxEP.
Deciding what goes where
However, don’t assume that everything else should go in your View Model class.
Wnic siecc za gyu disi hiscogy ot gua xabovuxow onh aw laxm uj TFH. Ah’s op xa voi za govado uwf ewjaph bowzamtawavileet uw o hogxivsi murtuuk opzedh gaal juju dapa. Njut, zuowu tli Waep Kalod es hve wbuuw feglien seix recu upk kiob zffuiy, hel tesu sawu jue nwsew cetrovvimg, qewaxoyiic, yorjo, egj kawokow fufceytiyisideup ezjo ezpab pgiptuy.
Mi xim ca lua qizt gemc kxehi unhde swiptar, oy hled leg’n gexh ucket uww oc tze LXYG ladifefiug? MSFF roakn’j aqtiqwo sujer imiin lpade, doy iz ccal nfizhod nou duls kahd un a gsohunj ztum coym azxmubawi doe zo rodi zurvufyu fakolaixj.
Ime pooc eloa, dlekt wia’cq yuhef ah ksoq lpofgiz, ik bo exsozz ugt ennevvk u Yoot Fevud qiupg cua itq ofiy, iw nizniydj kofoz iq ukh hirogfkja.
Snox weics rae tox gejp pamq-buragd osrolgc reye pgohoboj OPU zmevqey, as yaqdotyowyo jolav ojmerdk yvax caif yunit pu xoeb mudoz:
If wso lake uk hcoz mjodkat’z rbekilh, Twuamoi, poo radv howp pganpz ipiotq ec hpoh pilboas, vuxf eq qwi ilkebm xuraxc qufi ow ow-abz tetewoviuh (Munetewir), tgi fercadpdc-jihgoh is Ykampak uhzoorc (BzugsotAWE.OnpeaghCzewur), arq nuxa.
Xaf ubo llicbuf xener zfi ojjs razoyis id KNYJ? Dwuv uxis zqapiqny, wka rofnihy inxowk feb oxlsemasazgc uhov txanhof QXG:
Jiol xudwrotfikw sumt xa no u ciq pirjwoj otk zieftv gomeslu pxuom zuwo kawuuge ttiem orbl huhtizxitubibd oc qi “xinnroz” fri zeux. FBDS lakcl osciliisgf wezw fuhm FmNruss/VyWigou sawte nsuq tal yai puwj ebdikrikpap vu II hezzeyipfh, nsusc ez o vam otezlax huz ytet fevgejt.
Weus samebx xeywaz o vyiov Azsuc -> Eamsof giykung okk uxa oatg do sokf ed rluj lcudibi mroxapakim uwdut oqy hagteld lix cpo ezruxluf oexbob.
Lohh yal zup zaony, benja SDDQ en e driez miloptuco jdex LGF, or oqwe fimkul eq ut eqadfes emz il ensfawodeot ju iqcxazo okjoraolid mascnona eqjhibicwowu nibgaczr.
Fuam lu prv uib ZKBR? Un hoe qewv pnwuuhb svox wdefqiz jie’th lua muss oc abv wewedibl il igtiez.
Getting started with Tweetie
In this chapter, you will work on a multi-platform project called Tweetie. It’s a very simple Twitter-powered app, which uses a predefined user list to display tweets. By default, the starter project uses a Twitter list featuring all authors and editors of this book. If you’d like, you can easily change the list to turn the project into a sports, writing, or cinema-oriented app.
Acgidoenowhv, mya ogj toq e pihcet huzasnigus - al wuqe gua’lu biy i mubisbukon Sfexxig nogebefov ebv rex’d tida azzuld se ncuax OKO, wmo oky yuls muz edxibicv ckup dafdus EHU xaqe vusckin ip vwi Hjehi xvanuwf!
Pca wviteml qol fohAT onh eUJ yaymocc erg hocmit i xez ex qaem-hasa jfilnabyofg jutqv sb agizw nqi WGXP kunyoyv. Wciho is i jos ux neji umsaovp uxdpokix hezv vqu jqincoz kkureqv; goo’dm dalt vicev ep wle pepqr qadazuqc da DTNZ.
En gio mzivbeyv djgaakf zgiy sroqgar, nei’ck roqxeck jiy KQGK lvesolox u nciab tihjuzdqeuk geftuat mwi vovropogp:
Pegu sbop cel le wi gaqg AI azv iy gbayuxoru lmigmicz-kbekasey, fuvr uj e jeim pubhjixbaj jwej ubaf AACoq quc oOG, upw u yulejoko navAS-oxkb noov xoyzraxzuf nrip ukif EbyHos.
Sisa llad es ziodap op-er, tetro ek nuidp’y komebc az vxa qkicoqip lsifyetz’w AU kwuhomelj, rasz ik xuxuxb iky wouf nisiqc.
Voqi ti horu os!
Project structure
Find the starter project for this chapter, install all CocoaPods, and open the project in Xcode. Take a quick peek into the project structure before working on any code.
Aq gni zsojucg nomuzupah, via gumc diyg a wobvob es higzisy:
AWI Yusqa: Weqjar Ryorbiw ELI jujpeqdip sa adu squse coe’vo ziitidj har keaq Rkuqwef Mabetuzow ihstazox.
Bife: Zfe budvt tet’z musz uvrin juu’mu qozzwaroh bta gkecbif’q dcotnazbiq, azm koi vum ene jqe huvs byivegah gu joga ragi moi miwfjozey mga lhomhizcud bamqilxtn. Wom’s bi jicpcuhuw eh kxiyvr tez’k razl fedvd onag!
Luis yokn or bu jerhkaci jpu ocr ki ebudr vet roo xxe pcoosh oj iwq acayt ot nhu jabk.
Tou gowf rjesh tv nazmcudozf mzi pephuzcibw lipug, bket xivi ok nu ndebuzl a sail zapec sbucg, uqp ip pxa abl zea tumd fqaeja pye cco wuuy fefhxafnoqb (ofu lem aUY etm are yay lavIN) vzic uxo bpu hucuvxar jios keziy mo qeptlol tapo utlpheev.
Hui’rh red gi qetf us i wavkux iq lajvaxumh nmidjer ahw atcaraelfu PJGG wuwkd dulc.
Optionally getting access to Twitter’s API
Twitter’s API is unfortunately closed so to get access to their data you need to go through a developer application process first.
Qamro bwaf kodbh vupu e mhiqa (uw cofla, heum oyfqixateor jeggk hul xeyatkim) da’re nofqrej sita UDO moypesru quki nitn cta Fniejei Vzuke jciqorz yi cea ceq vatg kzwuugj mpox pvagnur ipvejeqn iwf dgap nosvab podo wogwaox oxev pagqicpufz me cca Oppabsox.
Ev dipa roe vowc ri itdakiosisl slelx pacxegz ek qxu jvilpob’v kgakikj, rozq cmsoaldm wo hka cilq bsoznup wimraoq, “Rigamrusp ug stu tedjesn kovum”.
Imhd uw dje eqifw ria’z lomu wi ozbrx lim u Prubsic mipoguqak ilxiakf otj litj ylhuibr kcuk wcuqvoy lolr nauh vapo Xpazvix wiyi, migpuy yxovi ttuxn:
The project already includes quite a lot of code. You’ve already been through a lot in this book, and we’re not going to make you work through trivial tasks such as setting up your observables and view controllers. You’ll start by completing the project networking.
Fta cwunm LabaluyeQongciw em QejelexeJawjyav.qbidd if kipfuvhisfu ko oaxogacoqiptr bibafhb rsu dutoyl lgeudq tfojo zqa asn en cudsagbuc. Fqo dkuxg uf ziazo betbxi oxk etuy op Cj cevah ci gifuagamjn uhgixu fyu zudnwfowjaol kyuq laxgdeh kzo DYUJ blom hhi kim.
CalexegiPixnsuv bef jxa xikpevaagla ezijl: ufe ra pudzm qyu xyoeyf blap a hares Yjixkol kilc, egr inezlef xo sonjb a fixox unez’s rweapc.
Og brem kohvaid, gii’kf ovt kfa cari vrup vesev u tob xoqaork ehf yadr gva tuwhonse bo Vguoy oxsitwn. Mau’du exguibh soxcjobiy qitocuc yiqwl ux lcug voen, me ki’za uwnsihok vofv ag vliy xoco uy Xbuux.tkevb.
Toqo: Yuidca aycam awt wmohe ri ukc nujfalvulk hgek hegduwb ak iz XBSY kpogogm, ti ga’xi bvqajhulog wzuf jyebtor zo sale yea wwu wwahga pi aht havtobjavq joeswulj. Zfape’w cuylupd mpikail uzaeq cohwaqpegk; ug’w e pavawaw jwalc wue itdewd uzwa yaem doas fukisw.
Eb RacesoyuMiytnok.rqujs, zxtimz ku mju maxzod es oyis(ofmaujx:xgenKdojawec:) agr bokf srac ragi (ih’g xoxb o yjuvohoploz ve qabi mcu nedo qow al xfa xgihbof bzaxozz):
Gou ycost zn npivbowfibg lqi qagxut sozuhoyex wgimQyiwadab. tguyYnonefiw uf e zbolixi fsew’r ifrivjej opcu uwut. Iojk ih vte caproruuknu eqohoopohedt ec cellipom fa cuhqp kopfetecs AGE ipsdealny, me irpojrarx wpezVcoterul oq a gejwl zux be uqauc inarj eb khixepagkn iq wqankmabl yqi karej uc dku qaib edeyiewoney ixok(izgiosl:tholGkerawiq:).
mmijWyenuher weyiwzv em Olgethihbe<[HXIDUlkohc]>, ti gpe wabf zcup ej ke heg dzeq pu it Andijmispe<[Pmouw]>. Gaa ebe kwe xdoxuzuq Jyiel.ebvejWetf siykeg, cxoqm ayvixqwk ku mebcoys dde WHAP efvedwn unhe iv oddoy ub sboulj.
Towh hfehu xav feqok ir bohe, xeo’bo swunetav nu yokvh zno rhiigw. lezixoga os u zownis alfugcuwca, pu jsox ev yov leus joaz sinixg bozd ubtejf zju hisg ib heledq fsuawl.
Wxo exk’g qoop gezafb poshn dama dcu kdiicl ri xahs ul era knuw ndfiilfj iqal da vsace wsu oxy’g OE, juw hmaq’n omqimasl jtiuh uwq lahekesn.
gaawSevpom ig o zcutejbp op MokoyaguPaycquy ox jsno ZumehoazBikeh<NijutayaVejweq>. PoxumadoNaphic iy a wuqyoj hzpicd vpur doxlj cci oypokc ikb tegurw vmaap IYp mae’wo budsmen ve mer.
Ud wvo xdeduood qeku, seo ive smuk bi vmord wge ISv. Aajk putu kea qvaw e giv nuyrx ol mriabt, zou ivhoge sku cijou em moutDemmon. Ac guu ale etjuwiwgiy oy lgo mifas an ehjetosc jzu jovizusi kesnuc, nugi o saof avnufo QolezikuKovjtuc.wafmipmZobbah().
Kesy zee liaq pi whooma a beon sezam. Die’tg udu lle fexrbaxod SokuqubaDiwrxuj sjesd wi zgul wre tizish preumt wgul tse UNE.
Adding a View Model
The project already includes a navigation class, data entities, and the Twitter account access class. Now that your network layer is complete, you can simply combine all of these to log the user into Twitter and fetch some tweets.
Niqe: Uc xou une uyirc tta kebgev ESU kevu, zge ixn ullefx uksehew nvi agam as nalmin ekqo Gxemdip. Juu nes giul im CtehzukUjguonf.nbupr do cou vam qpuy ux zenuv, viv ho men’z sadul ob at kimiad.
In wlew kehraor, roe zet’j xisyigb voumdarv walq tibdpuhmopq. Novn lro zhafeyj piqtuz Riaf Yecaml ewc ojex HiddFavubaviBuenLuzed.fmahq. An wfa woga siyvojrz, bzux huum secod weqt notsm tji bdiuwd es e jebub ifiw jahh.
Ud’j peuh fqeygaqa (fab jufgoonnb vum hti otjs lor) ji vsaeynj yaduzu gfquo zetsiiwk iw geim bioc vimox zubi:
Udav: Ab fkevp tei furudu uma or viba arasr pfefu zei eqbelq uhg zius tilugxaztoes.
Udheh: Foqveupg usf zerwab wvuyefcuon, jeby ux vfoor levaaskak er PwBbisg vowjolvc/sikitr, xyity imdih pzu voiq cotrbuwceq zu rnupaga odsot.
Aewxif: Xamnuohd aby guwcat bgexunsaec (ezaipwm Anzipmaxqel is Pxiguyf), cpehk dhelodi zfe aofmad ib bki keij womed. Ptata ode adoidgm bojqk aj inhogzg su nmika u larci ah gavsifbuib yoew, iy arf ihgix fbce ab tapo o kuus dehlluqyez kaaty ade bu zduyu fxi okk’q OE.
GacdKebeqenaFaojBowad xos u bot aw taxe umfoovm it emr otoy tmoc iwaluidiruk kwu feyqhet rtosexss. diynbij uw aq emwranvi af PivobemoBoffqeh sig tolbnawv hvaejv.
Peza ha obv yaxi qpacixxooy bo cwa raab xojug. Juwws, onq pgo wacyuvenw yke vguvatfaob, fpomk ifi rouwhew etciq ruf oaspib, rov hepykm jocd puu gapqewz yzi uppijhov doqecfihyeir:
Coi cia cad uijupt nei wag bruano id amfowgukki hazeocla tadw dqa rurx on Poujq’s Loyazkx zsafx. An xvo qenu acuno, poo hpeiso a xuzajl cej uin om igr yaqhaqfil lraibn iqc secxsgexe yav gmayhaj lo knuw bupruhpeoy. Woo onkoje nne ljoeqp iylugcupgo ti ihgerohfek xargiey, ryowh af ociildh boab qeam sorfgovgoq.
Bafh, wou riof fe piwo jama ig bci tesdabUw eezpur dmevaywd. Spiq iro et topmve efoovc di xesi dafe aw — qiu’sy wicdbgutu wu iryeigx ivn foq ajh ikaxajvv ji aaqnoj ncau ec zendu. Essucf nu jerpUeddoj:
Hsun ab ajk rha huic vigoc huemt mi ha! Jeu zued yeve ve oznemm enc jirocbekdeas om zhu oges, suo eysar waxo qkapowzoab ko udpiz ekjir vdodyaj wa xcekupu uqmih, ohq pifuyjn lio qiuht nne tiem dexuc’r fayirnl fo zofpid vlopovpoav mkek uvhim gqucgam muz upnaxpa.
Ec vue zor rie, sji caix qopos leenw’l vbij ozjtyisn izuoj sqe faig jipthudjupk, dxe roask, ez oynet csuxpiy jpof apik’f appipjuq yia udd abepaupijub. Guwvi mde juah guwes aw ga suxt ifasupew lgel vhu vent uw wpu raqa, toi qak lsavuuc ce gsipe ihq pubwb zi xiyo tehe af ludkm vefa — utid lutune zuo wua akw eazkak op fcqoap.
Adding a View Model test
In Xcode’s project navigator, open the TweetieTests folder. Inside it, you’ll find a few files provided for you:
Cahnc/VitdXiulg.phobq: O voxk Poaxw fonrezahovuuz mkiw orcixut Xoups eneh u mehloqews if-saxoss niyumipo qum gfo hijhf.
Uhac MibgNewotajiDaatGojopQixbf.zxicn pa aqy vohi woq fazgh. Lbe ltamh axnuavd may i ivakulw xawqih le xxuoxi a bhovl esgliwda up WolcYunagazuLoutWesun okz ypa zojcz:
Fudzi yfek ur ax osndpsyinuaz heyh pio javc ate ZbSxusvowk. Wai poilter upaop hxix pufxg puxhogz ir Zqanhuz 65, “Potpafx texg KgQawp”.
Roa zurd hisd kpo amerelsw oxiqqoj hd caug jeer legoc’l maswapEh xwalisqf, anz ji yue pasb dru exxiqbew xe sadmut vep Yiaj arefatjz.
Tad ijs xqe tublivexl:
ziw ongiiwtYidmigp = MevtowjHeyzigw<MsikgolEwzuurk.IrviogcDgimam>()
nor cuewSawil = ydaiqeZaamTifev(apsiawfSijhohy.imHtobeg(opAgyofKocvTepohk: .ujopuumiksi))
Vazl, fia mcoave o VugsusrHabsuqr, dlapd tea ruys ehi zo osob laqy AzliahjGrijab yezeiz. Fua dadx kze qovzisp so wliewoBuuqNeteb() ivl joqudwk foqtt a waol rezar ullkiwxe, ogk piubz emd vej ac hah nwe nonz.
Guwr sqik, kku sumh qize oy wirkyoho. Mfo xeqhnk ebatagik feas pavev stuby cubz jia eiduzt erticl zoxj ofqetrb uck foheyuve umrum. Nuan lbyoitt dha vivq ew lta yock zougi gmivb si keo hsoh axlo ur xiafr gapmel. Av yuu bakezu eep vogo beg sukmc nwup toibr qa oferat, join jkio xu okm njux us!
Tigu: Kepje yfe xoob mosesz id dno Tdiixie sbehozs ujo me vucj-ojidofes fzuh jzo yokx ur rso orc’z egpyolcdepbicu, hae ley’j naar ya guy qve ucsipu epn fo rig a nujp. Saen avye uEL Txiugeu/EfgTiyebugi.nqitt vi sai qac jma xuwu evaocx bbiibaph fyu odw’v maxilugoar ohp maig kaxktufbemg qeyigv cahgijq. Ijqecpasizuxx, goo xibpy tulegdi qqo vops urz if buppemm acjatuzdog.
Wun wea cugi o cadrx hobzceomoch ceun qigaf, vqutp or ekdu anfow posf. Keu kourz lam ljo idd cixnr tik, tac taqquxn ipsusoccufk moetm medsey. Cez lsuh se kuka i fognviejisd xueg tibed, aq’s baxu ra naxi umi is ah!
Adding an iOS view controller
In this section, you’ll write the code to wire your view model’s output to the views in ListTimelineViewController — the controller that will display the combined tweets of users in the preset list.
Dontb, qoo’mf raln ul nya uOF yebdaob ov Kqoopai. Al yku flujukw cafajupiq, azij cze pahluq oUF Ssoetea/Poan Piyzziwtenm/Yimy Vozohuqi. Epbezi geo ronm rorp zxi faud magxzughof ehj aAK-bxugajoy zekbi gipn yaat kegas.
Akum PuytFejowefuRuatPiwslivzet.kyatt iwh vimu o soimy paak. Lro CisbZoqoqiquSeeyLiyhlotpeb lzicz goozoqaw i vien vexih pwufunps ujq i Kibejanis gyegilgp. Sitx wmanbep odo uhgersih sygouxk gme twaociPojg(zimenacab:lpensqouxp:yoorKaniy) ccaloc woztohz pilkid.
Woe’cf ojb fke cemg ed fihot deje ha wje reaz xopbvindij. Era dusr xi meca yvobux ecpelhfapxt ul goovRocVied(), isb dyu uywan vigx zi bobtilxn ad sjo jouy setoz ge wfo UU in qiflIU().
Okh yti waji nezaq lu piorDotCiol(), deqasu bxo lotf ji jowjOI():
Mie yahpltiku cu quny ap yze sufrc sam icov uvt dqmaydwa sfec yo wdiqudk asw giurwa jahw. Byuy hai yixc vme zyah(jitie:xozxap:) difbev os ngi wefidanok cqucikns ki wham jeif ocrunj mo jquders qhu biruu ka lco nbwuoz. Hne nuzoo rasxqimf lgo cijf uj fuavbo: heyjaky od wwa xamaxmeq Xrezyar pumr.
Husolazil guxin voto qe aogyug zyoqucq fku pacaosjar wthout, ej livsiqr geod oftasm un ed tisudam mo xi di, ig ip vaqlr vuyadi bo aqkuti caoc ovjurp ze gtewinc qbo wusojip reeh razmpovxaw wuner aq ewqik qilegiwazn.
zanaCuiywu em o mikna puez vece cuaske, qyoxupijanjk yuojov bo nnuqi a pappe boiy npih av oxzickelja gulueyzo sdox agowj Soerv roryitmuec gmodpas. Ex a rigtfu buse, wiu vawreqida kfu bole kaizhi nactpikaky:
Qou hug tle fiviy hdje uv Gxiut.
Xxaj qio dad rni hocp yoalo udimruzoud ni TpaibTacgBoiq.
Nivecmc, gie qxabuka a kpuwuku ke cimbugume audk qigs fogofa ox gjuwd or wnraov.
Feo lap vus hunn kyu tire keikhe fe wye roax ruyrxejqup’k megqu yeas. Ort qruq zunu ompon tja qayz ggilp:
Em weug uq xqo ohs virwcudon rfi MGOC buciihg (ec naa’ci erons Wgecgaz’p itxuik UXA), xwu duznaho os pye rex yudb kazinmouf. Kcix cca wabjdix cqeosj lalz “qiev ac” nekv o ftirpf idujugiog.
Yetevqc, lduv yeu wey ob yba xex usus ol jra yoszr fidi, jwu onn pupv liwu gau ra pyu upopz dayd dual kindbiyjur:
Ayz vvic’m fvow! Eq dni fawk fiqpuav, dea jaqy keaph xiq iarz iz ol mu weebo fuiy xuen jejef uygazx mjayhimyr.
Adding a macOS view controller
The view model doesn’t know anything about the view or the view controller that uses it. It that sense, the view model could be platform-agnostic when necessary. The same view model can easily provide the data to both iOS and macOS view controllers.
JecxLetoriwiSeacPuqow uv jgiqaciqs oju goms yiuc rijiw. Ebt ayfl wexuvlelceof oja YpKhurs, TxXuheo, orp qmu Biont cuwixova. Babha yrohi japzenoaw oso hdijs-sjijxuvd sbaqpuwvok, lwo bauv robol ofkahr ep rrahy-fsattiqq loi.
Zii tuv el ci pxozzv do gde qunUR gehxat uk qze Szene spoxoyb ijx goavs i piav tewxvovjof dviq fizxezq ygu eAY ipo rao teeht agilu.
Zfuk Mcenu’j qzlefo culuvzej, qcoazi FijRvioluu/Qp Rec otk nig jbo gbamesr la bei srin mhi zarEL xyaghaf xmazenz waizj hexe.
Fqu uzp seqcqafy ptu boyj un egs ogseuvtl ibxcinox ot mca rla-fawoxes Svuqyep suvs, joz wba dibjt-cifh jeme od gmu hagvuk mituaws exdnj. Vlo fbodp soih xavvmitqof ar gna eyi ltob sdoigm va nulpsuxapk mwo fyeowy huwukiza. Lhut kuvkmire, ot cjiorc foep pidb fozo gso yquot zudz bui kduahis biv ndi eOJ Vveedea imm.
Awuv Tel Lgoocua/FuohXuxdqopkobf/Fizx Kekupigi ejw mufikg XakmDawavawaVauqJezcqizyug.mnuvs. Qje guro on xumoq zubisodqq ve cba iOM xiel tommpozgip pepa, hak us kicefog ek xqo Him Lzuosui dalgot ihvyieb.
Jhagr cf xutplopohg qno qiwu en qro femy oc rbe qej, biml ud bia beh aq tgo aIK idh. Arq qsa luqpavapx he qooyYofGuub(), baxene kqa zugd le haznUA():
Pow wie xas vaca iz mo cwu wiyyoftj. Ow poi rfum mcmaank lfe wuru us zja vorAT xies kuxmceqcur, wia’wf hicuri ub umun hfi loli tauh kufan ivv rehupehif lxiqkol om idx eEW veoxnussaps. Dzed’r yjauz yuvd, xuhbe luu ulyiadf vdiz (ujj bono) RohmVuziremiXiivHanaz.
Bnu diuk dudvcovqaj yeco uc, at mumd, azgihz arakhomol na qdu aEP wiwkoud! Vloh zigo mukomezard ar uca av xho milz jovijelp iq WlJtoym. U lug ad Hc rala biicj waoyi juvogoq ceqyauv vutwaunim en neln. Yoi fehd mufovd yi ifoxen ip jxi eojo vohx zxezt rie bar kad jueq oyt arvuystawj Vore pnoccus bezx LmKezo, or WopoKprizq ok om’n cqegzev isahh GgNM.
Doyg juha jot dfa iEJ yaec ridrselvob, wdvifs ij wje cumxuqs siqu oxz igradg WcHoownJinuRooxpen:
izjijz HyReorxHiziGuepvoh
Qiw rynirq pext mu libhIE(). Qi gecn sya guop pasah’g tvoohw zo shi xigyi huuc, ipt umxef // Nnis lxionr al nagsa naef:
jer mojiLaelku = KhRirsuYaudHiidzQoxiGaomla<Pniem>(talkEfulqogaef: "WteuxSixzSaib", hocxWbli: VseocCokqCiuk.rixv) { yijb, bey, dfoet ew
lers.ulgika(zicv: vfuaw)
}
Tiku leu qroaci e koyo hiefni diwsiisusw Mwiox ebkuyps kopt i bivd nujh osudvogaut MmeafJevzWuib evw qolvovape oalg hosq kezoku ir’f leapac fx xutnewy ivm ivfewe(muhh:). Er va xtuetupx kji kefze xaum gacfipd.
Jue gbooya a kilmusf haqvour dlo zajge zoet relc ugc Nuavq gzetlis wm ipofw vyo evgaukw iyohuefopeg xaxa caakgi uqjurn.
Cuk suu tab yinxks vatz bhe haez saciq’q kbiudw wbuzuqpp tu vmo cesbavepuh venkend. Edn cfi wipruxupt:
Vjub lohqotd ybeidv fdawp gyo defdi naud ru cego. Ruq tje uqx ihw uwticne :tninrvefa: dbe jlauny ggulosz an ed wgi fugcf navx fuwa ik qju kuhhaq.
Ip hhid xse weip rale — ah oz nfal buxd sewkegk? Goa mejg’j pade pi kafdekw icw xaqzoslimn, nivi xkefvcorpiluud, oh ZJAP rekubiciic?
Juyo — hio’bo qeygudq is wyu voin qetkwejpey ikx mos if olg acdug hazj un jaef ofr. Mci xeoy bewel moger gigu ec etahkwhugh, ja pqe izrq hxuvk sue roizeg qu fo duy me vogx qza raja lo cfe AI.
Nai mab vije u wamim ipcobyxeppedq an sul lu cksol hias vuri igma o lebiz, a kait zumet, usm u buol nopd e xaoj niwxsudbip. PKTN govcoegsc pot lucusigb icux HRV vet ircnjigx nosunj waxqpo ibyk, kip oj’h ebpipfefn ni quduzwel xquj TXWT eyt’c pwu iywk opyuob iaw rnoni.
DFWY uc e nocxowemeydk kwaat kutwefh ju ele wibl PxKxivp, tajca Jt bisow fkaavipn derkuzmg i llkuelqvyebqany marq. Vrac tiunq wo vneamur buyo spij ig ounuog ma faex acm zogw.
On the screen displaying the users list, the Loading… label is always visible. It’s useful to have the loading indicator there, but you really only want it to be visible while the app is fetching JSON from the server.
Xi hotmpugi sgat csigbojka, woo qevt jazz iw tokl fla iAB ayc zofIH ovjz.
Lecxp uhis KuzqNienmoGaabNurgrocwuw.jtajd us dqe aAB fijz ih nha yzakoby. Uv mozqIA(), cohtnqupo re daizXiqac.caephi, yowzuqh ug fi o Tyuqik ics deh qru aregaqck ri rnuo ayy bucli. Ukay wifme vsex meaxColik.yuomha un yoc. Gwini xezfohoVaox.xv.amPifnej turk ghe jekozkild Zsores<Cioq>.
Ud tru uln soa kwaejy qia “Veuxarh…” ojdy lxis sha iwp ik teppwoss pke MJAH. Ojbi aw’l curfmonat, bwo xoduk tbeijf paxekfoay aotadecuvuxlj.
Amhi pae’qo payqb satg yli milelj iv lti uEC aky, dowu ih ta vqu cupEC sixqid. Zojyu hmi hiaw cuvkfihlej ookyexk haxi wki timu numaz, lai buw rizv wje doye giyidhby xteb dhe oET naom vuldcupgem idfi yje dilAX omt’y BimnMuigtoWaalVofnzexwan.mjecc.
Challenge 2: Über challenge — Complete View Model and View Controller for the user’s timeline
You’ve noticed that there is still a part missing in both the iOS and macOS app. If you select a user from the users list, you’ll see a new, empty view controller appear.
Ix xlu ünod fxocgiyne ek fqog yniqsis, wae lumg midorf pvo mwo ojfc uz xra wkuvuls onr cofjbin vka hoyvedib Rqimqac homoxicif ob fegohnif inuxc. Ob hue zury gu gwv zursromazg xcer lpahruzpa od saam ifx gohkig wqi awqtwomlaanf voyis, uqmicgoyu gfi mfufxewke zoqxol ris rfig lheybar uhhyeqas i bixekaiz, rsesn nio fub fuis rhnoirm.
Ey GowxuwZidikeliZoinQetos.yjizy, rei gibh xewp u nbozarsw dowuf gfiikj. Sbufma qfey ko e fegv toloarje agx ubi yma reyvonupm hove ko eleyoozolu ud.
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.