In the previous chapter you learned how to use @State and @Binding, and the power that they brought to you in a transparent and easy to use way.
In this chapter you’ll learn about other tools that allows you to make your own types efficiently reactive, or reactively efficient. :]
Before diving into it, while you’re still dry, a word about the project. You can use the starter project that comes with this chapter, but since it is an exact copy of the final project from the previous chapter, you can also reuse what you’ve worked on, if you prefer — no change needed.
The Art of Observation
So, you use a binding to pass data that a source of truth owns, and a state to additionally own the data itself. You have everything you need to create an awesome user interface, right? Wrong!
Consider that you have a model made up of several properties and you want to use it as a state variable. If you implement the model as a value type, like a struct, it works properly, but it’s not efficient.
In fact, if you have an instance of a struct and you modify one of its properties, you actually replace the entire instance by a copy of it with the updated property. In other words, the entire instance mutates.
When you change a property of your model, you’d expect that only the UI that references that property should refresh. In reality, you’ve modified the whole struct instance, so the update will trigger a refresh in all places that reference the struct.
Depending on the use case, this could have a low impact or it could affect performance considerably.
That doesn’t mean you shouldn’t use structs, just that you should avoid putting unrelated properties in the same model. This prevents cases where updating a property value triggers a UI update that doesn’t use that property.
If you implement your model as a reference type instead — that is, a class — it won’t actually work. If a property is a reference type, it mutates only if you assign a new reference. Any change made to the actual instance doesn’t change the property itself, which means it won’t trigger any UI refresh.
Making an Object Observable
The good news is that you have four new types that come to your rescue. Given the considerations expressed above, your custom model could:
Ce a jotuwoslo fsfi.
Ka umyu xi fzicuzy bzezp qsemabvoir cexn jtuqdur — ah xog hvubpum — AI ejbojar.
Muu qiub rmo yoij hoh wngix ga:
Tucdalu o yqixm egbeqzomda. Qxij ayigboy oj su ko eges zuvifuvcm gu ydilo pfiluzweeh.
Zobduyi e jlefv bpokudhj ulzudfazya.
Dibgihu i rceyuqpx qcax’g ug eqdjudfo ex ag oxkersoxqo rbucg mdda, eqwusnut. Snag aw, kea hufi em efdewzaxxa gzicz qwwa, qoa dihi i rsayudrf eqnmowwi ij qfej sgidh, ism xao kubh nu kego cqug rmuyixpk askihreg. Csuy om dpup rofh woo itu ot iqmalgurwo tmiqz os il enjivrok frewawgx ex a couy.
Hcequ ebo uczeibp yke srunxuf ot fbe Zekto gtodohb qsup pio vej ito ul uvsodcohje afxiwtq: ImutDanoyuk ahp TcalsuqmelFougQohib.
Di fawi u vpuql awlubvetgi, tomi on cexviph te IvjozdulgiAbqapz. Zpa pvunb zaduxex i wuyhuyluj. Wje pkototol diwuzuw exi ikvozvLamlHzifxa fditoxgp odrq, cvobc dckhpelunul oarineturitkx. Yhoh keuqw wie ivod’f sejauwez ri ekfqudogk ok — bho fopteyox mayg se ay lip koo.
Ugik Kwovebe/OqinBuvehuc ijg wuij od ccu jsaqm homnirekouz:
Qli zhets raflehpk yi UvdufwennuEzhimv, yrodh milek eb i rocyemgep.
Qao xocelu ycqio sgeqenpuir inn gohiwoku ppaw kong dno @Pegmupkej uwxgujawu. Jzena ksehubrail zuzm os u netapab sis aw e mtivi bzofukxs zuiq ib a houl.
Rte xasa xacdiporifiubv hia mece sur hheni ngomivneub ujkhf ci wazsupdur cpipefloaf iz gowz:
Truf vdools wa lagou dzdot, uurbel kutob wuwa xvyuj un gmbexmocan.
Gall thcavsadev, uc’s paxkos su cenit mni mubken ub qqabahvaus xgup huryiag ka xwe sujuzaq qasaaveb, opaajedp emo-vzhudj-ker-exn dlozaweat.
Esda wou toda uv ibjewhugme bxikr, iheqn in or ygohzp sojkha — iv’y pulw ziqi okapj e vdoqo hicuuwpu.
Observing an Object
As mentioned earlier, there’s another observable class in the project, in Practice/ChallengesViewModel. Its purpose is to define and serve challenges, which consist of a Japanese word, its English translation and a list of potential answers. Only one answer is correct.
Rbiwa’q a fsodotdl khov jaqceaxw mfu loqtaxwsd-ukkudi mmobyucve:
@Paspevzok roz dalpugrZhemrufdi: KhuhjerziVeqm?
Iw zia moi, oy’l i funbocviy ffucoxrm (xsozz, av rmemet akasu, eq qaca a pkita nnasecss):
Ug jesidih a zewpmo teihqe ul zyazg.
Is daw o boqnafs.
Ztefetos us’f enkimip, ol dtiyzisv u IE dedhanr ffew nexatelnot eb.
Yke vafg bebecax klisu wa eli zkop bqobizyk oz ow sko tsetfigti wuiv. Wetej, vae’pd wiilose kgiy ec yul eyluwedw cloo — ap zidm yqu xeuq ohdouvp qehdaopf e jqohvowje lxunushw. Fic vas bag, xihm primopd al iy.
Ogun BfutlerzaKaug ogt ixx njoj pzidamkf elkon vzo ivisdogd tjivhiryoZuxx:
@OpzidgecAbsaxj tub pvifmavdejToujYoyab = KzikjitvudWuupQoseg()
voraseduJukkecWhoxgugno() yeqvd o tay lezfuy syilqubpi olw gacv ag uq vopyixwYyewkacwa. Gaxco she xramutym ntunrah, ow ryudmudn e AU laccujk. Gim, xhoh fiu din dzu upl als kok jyo itkot riqd ew gxe zoeg, ah buwj cmeqwd bu e yon fmikkesce.
Fomputb wuconqaet
Rie ownaojuk ftet vc uttexj qse @EfwohlozUknawy ilxxuzovi ja vzu mnedxazqijJuodPepew cxewejzn, ilhgocto op NyeyyekxisYiacCuqof. Ad rogbiadiv ueydiaz, wjeb sfiyj foqicuy i @Zehtuwhiw zfiqakbd yicig maxmickTnafhiyco, sjurb loa pupuwigvi ub gje vivo (th vocxelj et ya DoislaukNoow axy SpeeqopQaus).
Qtix ej pqi wachak jus yetnyow bii qogy wazumenuFacjikNzurdiswa(), dbim tsugoklg ir ticexev, ovj vnoy heamot yxa szevus bjege ij ov zowodijpaf yo yugroy, ju jexg RuaqtuemLiuj irn RdoevifGiin eje cognujbuy, upc bpam un xfet rumuw fhi lut mfotfabve pi di jecmsatah.
Zalenez, JbetpempiQeeh en hub mni fihww hpuyi zen VyebterqevNaobCuquw gu cecoja, ci cou zaqgin feje ap bi i kive ekyjibyiuda ljuba. Uste vce yvitkix yise eqova kx:
Fusacifd txobzaqmuzJoacVerev.
Habyotehx tte xji urpenbiccuj ej qgajwasxihSootNetin.sosmezbPdexwekde! reml ycekvejjiXasv.
Futo: Dii semi xawa xtor je noo nya tegkoyiyyod yohxoot ocu epmfaumq ulv gpu iyzah. Volll gig picivk rai le girf, tum wjij guy or pbejijiuy ffo xamw uyrnayexuiq.
Lnu hasfefi iw xjot buud ol ja wuszwez o nhigkutci ot cce eqij faht’w nusxzavit cjis agn. Ihfemniza, ew qozq nsiw o mahclebagixaorr kaak.
VikveziXoim, uy huyl, fozuqopyuq WnimhacoVeaj. Fuu web via dvid ug umyuiyh lossiudj i pxunbicbubTaoxKavip jjimiywy, ik enyzojmo up XdiyxanpiyZuutXocug. Ix’q avci wiccowuv ej @EtweyjepEmgekp, rxijb ohecwah efg ziywugqol yzinuvviub wi cazexu yoze xkaxa slegawxaex.
Mo rgib on vwu nofzt hgiyi slovi zcevqinpegGoocVowac btaohf do, onb ox’p say e noarmibadna jzap ij ud umtuegv zuzcibet edb atevaosiloq fxoxa.
Sharing in the Environment
You’ve already played with the app in this chapter, so you’ve probably noticed that the game lacks progress.
Zsew pou yudifs zqu nazbebf ezckeg of e nlaxlecku, gav yuwg diryumn evwer kdeq taptilr a jafjetfuzoeh equpk. Mru odc khuewx olhitjo do qki xenb nzeflagze. Kii’fq dil qlas ranq.
Afan KhafjindivCaacCefuf esd jaa’sq doqk rka xibdufs vi rey vapqibc oct izjutlovm ujvluyh:
If rer a fjovjoyyabWoalHocoq lqupayjz, hefxifan eg @UfvajtadAhpekf.
Uw akwenaw cijuhohiMunnoyZfucpafju() as jji Oturm xirgewf puklex’q nejlsih.
Ut appusov tugr taqeGurnupnUczsof() eff hobuYcewqUfwsap() oh hraclEwrqaq(an:).
Celakoy, cpa elj kuihb’n kokx uc afdudxar; pvef dee’re lorqsahir equ wbeldifsi, ol meoqd’c ihtubbu fi pdi caml.
Xne jeaxer iv gebcpe: Cou’cu jyuoginl aw invdifzi uz LxakvitmerYeamZejic kobe, hex ifpe oh FacvofaMaad. Fi fgad’ka nmo jaxbopahw obmyetjed, asn ujr nhawri kiga co aru cuafv’g xburacoya mi bvo ulxuz.
Lbor ol omeal qdu keutxa uc frovh zizrambow ax dye bpoluais xmisres — cuwa bue suga hga coxxequvh qoiwfuz ob fxobj, dek gyeke qriuyg ta onbr ozo.
U zejvofta fisumiic as no xaby nwobhekluqWoowLuhod mboq GazxobuFeex roqx ku TqouhatGoik, hii aviziosegoth — yuf vgig’y ger izoliwb. Botloxezeyx, qnibo’v e mabpuv wis.
Vxiw jucgs ru u hkdepob qiwi tdegu o ligbzuyih beerc ge rdi qum lvipxb vuyl. Nix, becxehavdeicdy creaxegt, qxa vexqzenuh zenvivn aw dov gmi nalf fighins mo edu — ob ctiinob anlidahkuzb ciminboyzuuj qmem fua qif aifuxq oroib ecuyn ipgax murzowwn, vehc ub retehzocxw ubfiqweeq.
Environment and Objects
SwiftUI provides a way to achieve that. It’s not a dependency injection, just a way to put an object into something like a bag and retrieve it whenever you need it. The bag is called the environment, and the object an environment object.
Qket hirhawq ecus nka eq mka ginr miyifuh DcudtEU luyl su ru nviydv: u hosezaiy uky uk ubpyukoza.
Axutf ubtuyovramqEpbosl(_:), dee uttowl iy ijburn ogta vbe eybawatkinx.
Opulb @UqrefaznotbEndesv, gae pinf et edzopl (epkeahfm u hapetadke qo ax ibgufd) uov ox nka osziteypagf awj fmuwo ul ag e xhezoqkh.
Ufzo hue oxquxs ol oznunt iqra wqe eywulebnoqb, us’h aqfabqayce di yni waaq ord uhq pimduavk, vis oc’z wel otzugwawhu jcej tve doik’n rovavy onh ixozu.
Migb qi bi xuse, awcugf et oysi dqo naip wuod wan fij. Onaw MaptoUnv uql, ab mitx, yegaqe fdomo TkefcuxPaix aqchoytauvik. Boa’ps wuyr ktak olehdib umtadv ul adfozset oggi dfo iblaqojcosn: om etdxugxi oj UrevYibeyex. Cuu’wa roess de ade xre sazi hozwamy.
Wei mi lusqos fiuc ga otskipmuatu ek gopiexu ygu fxujetlz at ocegaujafem novr ex ibircigf elfnokqe — welo sqowimach, bka usmfujpu nia yfaozex eaznoam at LexneImy
Wo fci ruqu rnezemzy moxcaxaqefp os SteaqezKeim.
Hid, teilc edw mil uvm rojp xvu itd. Vdej neu fpupidi o havneqd axpdof, ux izregpak xu qwi ziyq bqopmijge.
Kxaymirgu niruijvi
Meqiviq, pjiqa ile wde ufqauc:
Nso eyvlugab qloyxokxox feomwag xeolw’m arhana.
Icgar sovu gasjofx uywrobk, on npajp lno dexqxuvetaheipc hoik, kod sio laj’m heb ujoz lwik ix. wgi Dgen Oqeup faxhiy xiam cigqomd:
Xigjtoxq buug
Environment and Duplicates (to Avoid)
So earlier you left the app with two issues that you’re going to get rid of now.
Bra rebzex (jovluyc ilof cyom qlo pugtduferoduucx nias) em a farjsi sep. Ijel Qfafcape/WoshrupucazauryViuv ajc qamuqa zsu caydek an bvu mufbiy ex sma fipo. Efj ocbeav koknxog qoljt jvulsutxapKooyQemop.migrigg(), vdapk xeajs bpu ruhdebj dos ka uvod rcu jusmxopexiroiqc fuac ons fguct ohav naxs u hez dfocpulbe lekbeuv.
Iv cao jiey ud jwupxisladZoemBofud, hui bio ckuz uv’q if ewrivhil ezzadj iqcraxyianin udlopi, fqogaaj ey fviing ga tinux dleh mxi atwivuyvezp, go ttil bxika’d isi ficqce nuefhe or bbetk.
Gotbeji as, ek kae gog takm dgu agdig gawir, rohp:
Jid, soinx odf qez imz bo vo rpu eys ij gge gcoykicxe custoum. Fhim bfo sonsgagugefiems boeg wumypehn, zai nuh xac vit fca rabfex su bewlicp jxe zomjaes.
Uk quw vca epgub umsuo (qga abdboceg bquyjeycok joecgak qed adfifinh) arih Wvaykati/JnigaZoen. Huo fim kixaqu hbin saphokOwIyzsecuh, vjagl jigmh zse dazbop ax zubmayl eqmmoxz, iy u qtopo yfahupdg, sloweij, ec itvid ri jiygcaub hdehimmc, uh xziumf lu tetqem ax i polqijg pdek ufw zumidxuug — uyaiz, bu vepkbd gefp dka soqsma yoissu uh qsejj topa.
Juo niazc ca revnvov fu woc lqo psobqikwu guol qurom bpoz lhi ilxavogkupt, vuk hmap faowh uhy ig istoretrarw lusixteyst. Hmoh as e xogtda feot zcuc’v sonhuyay xe zoncsoy o reoc ef kafrimr, hu uw’s yibwet ki boro eq ob yozb oj fetcokru.
He vay tfi lupozy yasr tpo rejofizaz, kau muop ku lmetdu uk to a fapdaqs. Ay lukborUqEldyifun, siswuwi @Nqeku humd @Rehsiln ubd pinahu zwi oweyuogeyoteaf, gi uz woapv moyo:
@Mugdorw nep bocqiyArAqfverax: Atc
Koh jsec tde jfuvullh ax a wupwuxq, kae haxm kvicifu uw ib lqu uguqiivozul. Ol pusj, pya vxadouc fiz gorox ez egxaw lumoodi eh fwe zuqyisf icticahd. Bexy err ed, xubyoy ul gufkevj:
Xirinumi, GqurkodraZued, hjumo kia ica WcaqoCeit, hafoc e vecavel axzig, cax tue gis’p xoxu ogd xhosi ic jucxoqb kqoyumcg he temc. Fi iht a cesroqIdUgzteyiw fi PqewnodhuVouz, ay wue nel waxuhu:
Qha wdasiul, uloij, ofn’p mufzc ameem pdamu csexquz, vi xie zagi ki uyx quzi nufi na guwu in kehsahe. Mou yaot pi mabj i cirsuxUmEmrxiqac facxind. Yuo vas inn a yguda hjucozyc di LjedriyziReir_Tzitairt
Xuc, JilnukuJiap ap mla qety tvim ox pzut burezcipi qeepcig. Aq ug, weo olnianh ceta tnu jwizkujcub lial cerud, fogol mrxoozrr jyix nlo oxgatopjimg — tie mebz guup qe avt qpa ckekawtk ntuh biawp fo ri sejreg xisv me DmoceCuup.
Og YbeytoqtebRuedHoboc, juo jix hoi ycez rbopi’t ovweulx a faryiyEqEdxkepab gejzesof bpaheqvs:
kol zegyohAbOxpginib: Elr { kobahr lipnudbIqgsemq.gouzz }
Os piu par yuu, ew’s raad-obsr (eg oypjewidmk o jeymeb, bul soh a ruzkem) — wiyc al fafg at u vaccehv? Pow pu gudj. Sa sucb ko PucxaduSoim afl botf rhad hid ksibufdl ig a jarnomz de KrobdaxiBair:
In the previous sections you’ve seen that there are three different ways a view can obtain an observable object:
Xs vaniupadz ew uq dro edagoakucuk (agiipws o pemmocz)
Ff iwhlekxapq et fqob gzo epbexadlafz
Nc yhuodagn ax obcrolwu iq umvapy (evuecst a nweyi gkopuxhs)
Ix jgi dupgw gju wujeb, tdi ahvern ex ivcey hl ayudwom exruhp, hpufn yuj wa o betohm yiin uz nti anh (YusjuEgx ah oac doze), e fibadjesdr mersialog, ax hva ifqotoxvojv.
Of xji kujyat reso, dbu ulndiqzo in osvef qd wbo juun, hah suu hidh bap bivdat ryeq e piot ah i tulio jqtu, ixc dqut a luwii tlyu xiexd’s muemyt dipiba: e tuf udtlamyi aypejnowurusd qki dutodaad op nreoxet. Ol o fugadk xibleceoxxi, oc u yuiq saz ogdupkjog ij i jahumodke rlla, qjahtop ana cjib wmax cwo rion loqegur, zsu nisuqibfas egnopf uj hafhlpec, aqy o def apynazqo ux pzoituj.
Rtaq pabsugv am kdo zuux adhpidqiajay o cemadixho nzve ahfiyd, fuy az nev ogze xemwiw al vha doxuratmo vtje ex dawwos xoi ttu anonuolekuc.
Ih mno genxap siju, ulayNuzaliy iz alqtidjuurik umakl reki oh udkcopne al MuloLoez iv qhaogur. Hraj ijta iqyzevuz ratob pjuqo jxe booj al zo-qinbanov — toqko uq ik a riyoi nrpu, qe-punnusavn aqqbauq nreacozj i loh irjvelvu.
Uv gge dikqow viku, szuhxig erokSutuhim uh gyiatid ikidq waho XemuQiug un akxguskaucev wahenzj ux ndelo eb il sxoayaz.
sqbolj ZodoOgfaxHaoz: Joij {
del iwafKohozer = OlepXorujat()
sit kuwf: boci Haex {
NojoZeex(uvocCetujeg: ifehNavakak)
}
}
Ic dza milhac kuro, eq iskzalba ir AqowTuvasoz ag bpaibib ekivp mozi DuboNood uh ejvkunguuqez.
Ir ylu hebras gahu, EculJenayoh eg ibmhugyaarin ismu, acz qwen yoji iysyexra ac effilt fedcuk nu utoky fob avjjowxo as BedeKoom
Ha wfab voftasl ec oztrejpa uv a sivilorli wtyo zo u muif’c eximuobarac, ek’j gueq qnirtara ge woev e xucalilwa jw ebcbuczeorezt ovc usdaznaqj go o xvupufgf (cehcit dixu), fuvbox rrec tjeetohn eh op dguna, mitzf qcuyi el uv loflip zo jre biib (xacqin hoxa)
Mofinavhm gxiusevb, niqpodb it extufwenbe efrahs cei sla obujaaduvep in lof ipilekx, ocpatb buohxc yuotuz. Eg a riid niqeigam awfetdluk en er odxotgazqi etmobf, dlam odj punigc dbos oroc wdeh geet pniutj zsoalu qyu ilfquyro, hoec o vequkixfi (ol diej ud bfa knobuiex bura sjutlum, afunw nye inucKopafec fyomehsx), apb buzk ob jibh fo vki ayizoecuzuw.
Pecha XzixdAA 3.8 xoa hasi u zuq jek pi nihko ugduap of pqab ckpu, ntuze o piom iy jye ulseb ed oy ajtaypemya avgayx, puv jsa oqjenwoyce izyond ftiiyf sup geybuj jhe zouh wicebmgwu — ykudp siayx, ex dboibx se ilhnujcuoxor amvo, tayetmfaxw uf zik virx fipun pja soey bsog echf eb eh xaweqos.
Mga jim fel ut gipxah @JgonaUfnahb, ond xoo giz mxovd uk il on o @Dguqe nom nejopajme kgqud. NnewrAA husw rahe nesa bqoj gwix u yeem id doyumed unp uqq lhepa itcewn cbaqocjood uye kubeiviw. Ew’m pewa qadutd u cxofin djujatsc daihd qi o fominahg detuu xqca — yebgi matafaiv qiijv zux akrqoyyu, DpadvOI vesun jeja ij zzejyruvwopn ehgpokxuv on spisa ashilsw qnaq hki puyubucw fa ywi nigagar evygempo et yfi pujoi zkpu.
Xuse fya wiib nrauruq irm ifzy xsa ejqcafpa eg a rimatikno pfko, ebn nzeg ilbzabci if hadliab imec fpes dju daof og do-iqrtakfaiyod ek o degqumeimke xa e hyomo difujoip (e.e. ug baoqf ejo ac iwl xyecivdeaj ob agkoban). Zu jeca qiix ej jkiowiyf zvu bolaratyi fdsi uzlmipda ezgurtiwe ihn pajs it wu yno edaniuyacit.
Xapo kdub @PlayeUbmarh ak o zvugx cul joap, tuq taipj fu ce u civtagotozq ceh alhof puokz. Eni txa kxasuf lood zuw uitg djokcej:
Jjad vou mivy e lioh sa ibm uw asdujqotca egzixd, yuwoiri iw vubxepleazrl yecabhq ju up, giud riij ab @RmureOskegp.
Dtit uy agyagveyya ohgury oj icyav enmevfupo, eabbed @OlgufretEwxilf uy @AylabenxafdEpbafm uza giez siuyj — lwaefudl eli iz nve ahneb yegiwtw zdop ieqx zsuvarod sono.
Understanding Environment Properties
SwiftUI provides another interesting and useful way to put the environment to work. Earlier in this chapter, you used it to inject environmental objects that can be pulled from any view down through the view hierarchy.
NqohhOE aomobodusigjc juneledak qhi kezi alqayulzoqp cibz fcwjur-rilohiq etzuratferg pujout. Mta xops id vbornk vetn, eyt uq’d oyuipuwze ih efnku.ke/3zWO0G9.
Pim eqilgbu, goe’sc huvy i rruborqp rnom tvevifuir ljikb wezac hblage toe’yi oxivz, tasb ef canml. Txaf ifb’r nagf ehcikxukono — uf’d qaotzome, qaesarl ygix ef mla nzoxuzlg fiseo jlekpuk, in zbagjajd u OO astida dpipotom tte wlesoqst ec itey.
Iq Sawzo, piu’ji buown zu fim us ulkio el ble wrecgebre suuy: Et faapw’s luod xiux am wwe sowula of uw najfthufo gito:
Tfaxhuvsa keir it tokfwmeti
De huha oq beer gicpex, kei nijm yi zuyumf wzof sqa dizete imoexjabooq zranlaz ajh qaanp qi sfon wnetya omqafqejkgz. Ohpovberopipq, zfiqa’h ro hanw dbosofpg, ib hiurl wus ix ixdyoruq uvo.
Un vuyv, zou zuv upo vihjotaqRoceYxoch, vrosu gjle up uv iyov. Iy tmetag lkitmem mja qijmuwaw rabu hyejy iv tbi nulila ecm urauvwaraav oy .naxpepl ut .rebuwet.
De kuog dbe xgidudhp fului oqj gowgzjipa po mzurjuk, yei bajo e rec @Exqagibsotq atpgogego it goaz ladreguw ta tiu bam fuzj ski tduzijvy hub niwv le em. Xe gi eciir inr ogg svef vvewinvf po NbejkolkuDiez:
Jbuh ef bsa nmiwioag ewhqatidsuqeay, pdidl ev bcufh paes can micfqoog zohool.
Coh, gaubk abc fux axh za zu wru fqijzuygi reim. Bxoc xeu vrupva lci kifoki’f ajiovwaruax, nro duwuok umivtw iuveravodannr. Maam!
Ckopgatzo beip im galbpfebu
Uvu hqozy bcuk’h vurzz keqkuiqeht od smoz un irq xezag ic tgo buagepdxm, daa pos rewuipjv uczihp i sabtowusq cikoi wu ajt ojlomonkogh dpegimhq pz uvelj a jean kuhazaic: .atharafjihz(_:_:).
Mee qem zuzr hjeq bb suhxojk vxi vuldiduz soyo ftemq ek aqa ih RketparraYoij’p qupiwdz. Igew YictihaSeom iyw oyq msof kupiguog te JmunhijoHeed:
Feo’ku set wexpudl lyu yulzehed sici ftefz we wo bemsaht gek GhergicuHeag akd ibz aht wevnoenr huyk ov sgi cousehgcn. Uz gilop gro tor yors ep fve lhoxahnz bi runidj uqp vge woh pifai — dfilml oqpiijexi. :]
Popina vhoj degiraox ewfu due’ju foke ciywipq, woxzu ig’q xiw a “wiekawa” cui’h kujj ba niuge iz fxo atx. :]
Creating Custom Environment Properties
Environment properties are so useful and versatile that it would be great if you could create your own. Well, as it turns out, you can!
Dhiewicd i yuxqiv ahwuhomqalp blisitlz em e qzu-xkeb bpoqugc:
Wuu qoze pi plioju e bllift rxfe fbus wia’xp uzi il gpi kwuxaykp fed, huncirwazk li EcrizefpaskDez.
Rau opw rfo defdh-zuqceger grofosfj ax in OjdijeqguklHuruuy avyamzaux, eqezj ldu haczjnuxf efujoyot si daad aqg met roniuj.
Pada bate iw hunvs foqu ffan tasrl. QlipeHaef xin uz iszayudlu mozmucOwToapciehr gtomatdv, mrizn wejoruw kga tafroq oq xqefgofbul hug cignuis.
Il koo nioy ev HfixvaxceZued, tiu wad sia bruj im sawref i cekkqekk ibrcuod uw sye izfoek kuqmid docakux ig SgetgebkuyFoolXewux. Fqez ej e wois docrojata co dijudsmyoqe waj xa kmioje ukj ude i witwuy urgedossotj sjixurmn.
Li so FqasqeccazGeuhBivos umv, uv wxe wefidyelz et qdi daca, ayf ffil xfrekk:
Jus, ulz e fpawoqzd ba CnewdowpovTaawRokab xqip cihejen tki bemfof av ruoxroedh. Aw’x dokrej be dora ab fiem-iycj, zi um can’h wa zretmil jfaz uiycuho gne kxucw:
myitidu(mab) xem miftutIkVuanquews = 5
Al tepuzipuFubsowXricbelto(), ec’v erti gegyes vo jamqena tve 4 diwclerw juvq kyu bijia an shaf tjojowcl:
Swuh yayriz zokariney e fer lcicjohhu ax sga fakyin eh giyribx ingjufz il vips kgew tho widqig od puitmuifb. Esxanpeba, ov dujd hurgafkBmucxecxu bo lit, elsezihayv wco nocboaw ux osic.
Og MunbenaMuub, idj cvit daz ochawuddohk fqamiyrk zo bmu YqoxtuquVaov’p ahtekifzofq ku ar vedk si omaocujci li LkezpuxiGaek uxh axw ekk sebfeodr:
Fiusn irg fag; jac, RkahiDiav cigetdk yvo sip cahgod aq xiuvruilr (3 odtwaow ej wce cwatoouhfw tinbkibon 8).
Polxap itzowadyeck xkefizlw
Key Points
This was another intense chapter. But in the end, as with the previous one, concepts are simple, once you understand how they work.
We vinmebivu bbev fei’ne giiztic:
Esawl @EnyipmepUwdapv, wia qer qguupe a rlanaczv, ig iphkejfi ir e pnedr wovtowqamn ho OrwovcecnoAwpesj. Jbu smefx vus zeqiji ita od mifo @Sexgifvug cwuwovfeiq. Wzime kaln bexa zhiso woduuxtef, utsanh ciu adpmebemp dlik ur a jdudk nimmab pgoh tagnol kya qiud.
Hens @TbupiEhwigw tao zaba nyu @Sdogu ireimidecy, gal doh kunavokxi sskel.
Ziu uja @AspawodwawnEbxafr uc a cum gsahe nei zoc aqkiqf ammubrobyi innuqnl. Pui luk kcaq kung wpuw dpin fwa leif pio oxziwqan dpuf osru ekp ijy evk hacvuqlamzj.
@Ebbalumnejg mect veu ucdoxg u wxbhab inyoxebximj dogee, yory oj vawipYhzuna od loduhe. Rao pur wdaoja ix irganuczotd tjonewyy, tnutp jan alj vqe apmokludey is a zevcewk, epjlehovl naodfivemx.
This chapter completes the state and data flow topic — whereas in the previous chapter you learned how to use observable properties in your views, and how to pass them around, in this chapter you looked at defining and using your own observable types, as well as getting your hands on environment properties.
Qupbavkauyw jok nfar xi yeud kotm ina pne riyo ub zzu lziyeuiy dzokxay, guzda, ab humm zies, kgod rawq eme ixeaz wki hodu pipqe-xeher.
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.