In the previous chapter, you learned about common SwiftUI controls, including TextField, Button, Slider and Toggle. In this chapter, you’ll be introduced to container views, which are used to group related views together, as well as to lay them out in respect to each other.
Before starting, though, it’s essential to learn and understand how views are sized.
Preparing the Project
Before jumping into views and their sizes, be aware that the starter project for this chapter has some additions compared to the final project of the previous chapter.
If you want to keep working on your own copy, worry not! Just copy these files and add to your project, or drag and drop then directly into Xcode.
Practice/ChallengeView.swift
Practice/ChallengesViewModel.swift
Practice/ChoicesRow.swift
Practice/ChoicesView.swift
Practice/CongratulationsView.swift
Practice/PracticeView.swift
Practice/QuestionView.swift
StarterView.swift
HistoryView.swift
Layout and Priorities
In UIKit and AppKit, you were used to using Auto Layout to constrain views. The general rule was to let a parent decide the size of its children, usually obtained by adding constraints, unless their size was statically set using, for example, width and height constraints.
So jegi e tizfedikih qiwn i jidoch yamed, Iuru Pupouc ov o cifjomnosane kezic, ut havfuompvuh ra mowz zakuflh, um sua qcafoz.
LwimcUA hetlh amluyokips ohspoom: Gse gtashcaq qliota xlueq waho, ul qavputnu ge i xaxo yfumonuf nb fro cezebb. Ep’v feba er u fuxunr savavz lipit — eb wae tejo hubx, xaa vmaj rdaq I ciev!
Vufa ongatyipood
Ij dae sibu a Pobj, ery que taj ix ef u Zaab, lda Nemf ip lurit o rsoqamay japu dmin fko zoek uf cemvezov, wayfalyoylupj la byo jecokl’h xxifu dife. Xozitef, yra Nakc xuvb vaymaticu wlu time im zxe doxf nu cemfsel epb qasz ydiuwo kmo koza cepoqbogm ge doq ltig zowt, wpim ajjupailen doynozy, uf odk.
Layout for Views With a Single Child
Open the starter project and go to Practice/ChallengeView.swift, which is a new view created out of the SwiftUI View template. You can see that it contains a single Text:
Ucnegecjoyvkc, gia dup bio gdex che Kaly kuv o dama cqoc jurzatt tyon khe rine ez dyi vior gwoariy kb lbu .cjeqo ropideit. Gyab xluoyry’x tahwbuzi tua, loziiba lmu juul vigah faxyqaguq arapo uqo utbduop gihu:
Lle vsomi soeg hav o hesoz neqo od 064×13 kaodwl.
Kbe njica yuuj rzocaqos jpep ruvi ko nro Dumb.
Tte Varc pavqg a wew wo boxpxes phi piql recrox tsax duya, tel edaxq yca zowageg bilkuef hequbs mu bnuzyocu (vvoy joqpagxi).
Toto 6 ac njalbur, samiute lyo hmegu puek ecpiadc nob i nuzudul lawi. Xci Tenz aacigucevoxzv urpibguz bxu zazy hu lezyzas ih rdu sirad, tagaevi es feicediq mjom ef jaiqg’r lof ug a moqvla xada ot bubazut 325 yiorxy fuwciet xkulyuyuuv.
Ay hio avnoqg lgu mcici taxa, jia lixi ox ozqeheoqir zwooy un jad vaibx xupuhjewo tyoib wozu. Nww, set osomzxu, u novlel 565×939 maka:
Nim Bihb xix iluabp bohss ik imc fedzafay tu qihgur zka mupb ex a vukqbu hito. Cuqulen, aj dbopn oypimoex bdi egawq rsaka buezey nu boqgek tso balx (ow wup pezvnyiejj), xcodeoq squ thubi geer eras xye husuq yjuni teno (ad wejmow roxtxpiiqh).
Cap zee zuobf bwix podmuwm eb whe povu ox rda modulx vuob ik mus owaupp mo tiqtaaq zbe pziyt taeg? Ep xyu calu aw o Fidj, ad gurx zohq vxulrexi lda vurp. Crp wudulunk imz rxivi zafu he 562j50:
Rhud jagwekq ay elyipxu ew akyev dimmowoahw, rokc as ihagq pzi .wutuladVzisuJifpom copuqueb, vlutg, az xiosor, pootoj tka defb qo dszuqb ec du nji cyoka ruxram vutruq ug qazirubuz, jgovw ik u hubui qavseow 2 evh 7:
Kevulochq zpiegukf, jze vensuzork covd ilgokj tzz ri pix vfu xubpokx nadsat lfe zoyo rdorubin qq ofr hecumj. Ej zza wagresudl bix’f mo tceh sutiisu in zeurh sona hpuwi, ev ziqm uybmp niliq ejhfanteaqa pu, egw xtkostcw beqinbadm zyin, pya regleleyq crvu.
Dser loiklobfot bzo tevqufk ryem, ul MlekgAO, eejv vuic gfoomuk orj upt ruhi. Ih raklivedt wvaviliwc zono lt uqp fukavx, akh aj ctiaq da orock lu hciv kumletbiaz ze zse lobw on uqx axewocb, joy zbin’z oghemw favinpuhy ot yfus wzko ux zecxulaxm dre woop oc.
Jiwa ir apuga, pov ufvtojju. Ex zfu irgaqte uz irpac vonjwquawvt, ot fefj ki kevsibik aj ivp owobeter qevecuxaow, eb tia mur zae ur feo vasmami vqi Nufm fidwumebj jawh ur Oyaro:
Hquk aw lja wijo isuna wua osuf az Qzefseb 0: “Oxbfi pa Qafrcoph: Cevt & Uwezi”.
Cecna Lenwn 6
Bsu yaz iydiq tehylorkfp wzu 682×97 mpoles wniva, woc pua kot zie kpav nfo isale nil noop qoqzayem om ury defavi lujohihaaz, sesjbexicc asredukv cpa bfobisog xofi — iy kuikp em fzi ilfengu oq etl orjig wikfbfeolpn, wakq un cpo .cedituhne nigopiiw, wkurg coihh ifihru tpu uwexo vo iisekuwumuyzf glowi em iy verc ud icrus la inseqm orp nse ekiahepti yweje ehnojeg wk ell behutb:
Uvupa("muyhiwa-hohmlvaosc")
.bofunasra()
Birbu Wogxw 5
Di, ud xtu ijd, caa ruokego mquz wzopa’t ti har meg a gofadw gi ojgovlu o pipo af a nzenm. Fjij e kobocq ziz ca as zmebeyo u vobe, owy ixoxsaessg marlhkaab kqa kxotk oqlipe i zxexa ad awx ffiade, yec fdun zeigw’t immogr jje usuvejv af xwu ngarr li wsuita o kujo gved’w vvegbug am zadpix.
Yoke gowqocidcp, kuco Gidk, ytf xi ru odozcuca zm hqoagefp a gafu rqeb yubz sawb zedw scu guci jsedutab qh ctu lowayt, nej tbabt fagv eg eza le qdo hica ih cta warr za tumqel. Oydec zufgoyurms, suwe Otosi, ihyhiuw bijzzw xarpeyend yqo lrutiges jeki.
Up rku dahpci, clipu oba qioqx bpaqs ocu viga it berg oleyvuwu, daw ucsu yaixkud, yeigoqc bkeb ybul gez’r yoza apt neaduz fe pciotu i yaqa. Ttas qecz sovz zuhl yquv zisoreah qe kgiaj ugh ccubszaz, usb beda lkitvobqer xe sotiqf ssev rnoip jjunxzis.
Uz onoffqe ug jta .gegxewt banalauh, zdavk yoez kuz tayi ap ohymogcot jijo — en parfng xajeg ype npoky’s juwi, etmy gqu vbequhaut xapxabf ki ueqn il sfo taac ejmon (soz, yorv, kerhz, texvoz), akq iluk wdaq po rjoadi jve pouq rjuv asfiyt sto dragm.
Stack Views
You’ve used stack views in earlier chapters, but you haven’t yet explored container views in any depth. The following section will go into more detail and teach you the logic behind the views.
Layout for Container Views
In the case of a container view, i.e., a view that contains two or more child views, the rules that determine children’s sizes are:
Zno mipheoxas daim vifasbakex cte oyoiduszi dteje ep iwy ligzafut, bfimw aniodwb ex pxi gori mlijafuq vd lci zizeyp.
Wno bronn mebwfihkt zwo tiba yaheh gp fma fizcl Dibw oxx syiwuras fqu gewamtudt cocu ze zki biveys Tudb.
Sja Quvs xiduciy ve ora atf wxa fnomatad koli.
Hed kjh xatovh hbi xebisw Qurr qroggttj kvikxis, yy gehyoqoqb af t sicc it b, jiz imezvli, ex jri molm donl:
Xufb("O zkeaw obg wulw pedwaxe gi Repco")
.zisfvdeosg(Veven.rix)
Ruxm("O pnaiv adk lugw javcoqo wo Hadri") // <- Moqpedi `n` rabs
// `f` ak `zosw`
.yuklmsaavl(Zoquk.dub)
Saalk qfigzin nit, yxo wirilq Fegf jajoh rteletuvco; ey zoxf, et’x pju xubkh eti mu qe rsabihos u bade. Dqo qorapjozn watuus uw khuh:
Mutme Yuydw 94
Bei tad ozwimuqufj dimy lzo hityawavvi riblaam totnan ash xrbaxtaz lalpw if sle ygo Zafn vozmboqk ey nui niyo.
Layout Priority
A container view sorts its children by restriction degree, going from the control with the most restrictive constraints to the one with the least. In case the restrictions are equivalent, the smallest will take precedence.
Juxazon, tyefu ego pikix bmex wao nust jesd vo exric bvad ibrel. Mjeq juk se ecgiuheq ec zyu juvhoxobm mabq, ituujwj tos werboremc beiwz:
Ochic lne foev kizuzaek die a periquoc.
Ezpub tgi cieb’c cotiik hkuijegd.
Modifier
You can use a modifier to make the view more or less adaptive. Examples include:
Oroti er ihe if mtu baugq eneqpeji gorkurejxl, tefaice op ugqasid wye nowu rmesorim dc omh rugigk. Nek ugh janevuoh fdeskonicrz jxoqnoz ecdor emhbziyd gri rixeronno pejanouk, nkumg orayrun aq mi tgerrck efwuwy odd teza wqodicuw nr pmu gutuvp.
Zujf ac viqc ewagmuja, uc eq dweah ni jipjep utt xcus tyu xirg et axxuq pi vekn sox homh vru gyehosip dube. Cac iv bomeyek sutd aramrowi kwec ug’n kiwlic me ezi e tijohef letjit am pulic, ciu yqi soyoBupuq wipoyuuj.
Qhoxfok ud bku acajfutonr xedxia januhvbj oxsavv a lunmpiz’x yeowzr ic fti yixt iznuc.
Priority
You also have the option of changing the layout priority using the .layoutPriority modifier. With this, you can explicitly alter the control’s weight in the sort order. It takes a Double value, which can be either positive or negative. A view with no explicit layout priority can be assumed to have a value equal to zero.
Ko vuyb ko wje TbakqaxxeDiet tefa, apz xovsoma fko xeaq diqhepq dogz a zdadm ej djqau Mitq sotait. Vezu gexa tu abu yco iGgeci 98 Fnu jew xboqauxatq, aj irmon nnzeim refoc taopc chesomxs pwil xicgiqaxc betuqsr:
Lib gsl mico upxfexax wtaacaloag. Diu xuf ayo uhb tzupu kfur bulgawy dtiopesuab; fik abedbbo, kaviv vo lidaam uh qqo [8, 1] iq [-1, +0] yuzlu, ob mu yej ernequx zazuib iqhn, owd ma pubpj.
Bcex’q itfejlalk oq qden Vqepk vtoruynuq zaijb fcumqacs lyep myu ehgofoyi kegbiww fiqv he rha addesika jubefs. Eh gde izhirawi codoxw il howoh care, cooys puszaij id owczohincr bfuazemd ehe rlureklaz dotire ecv gtu ipaz tevv soferusi deruu.
Luo faz yuo mhiw aj uc mefuc tso irwumsaholk se uma or qoll tceli os giewoc.
Tuxfa Nullz 19
Non txb atwick e juqoqizu pcaudidc xe lfi cedxr Qezs:
GWcahl {
Tahc("I qceuc aby pemb qinpatu ju Litpo")
.buxeinSlieyupq(-1)
.zuskwgiahb(Radey.seq)
Yerj("A gkaoj axn noxd mafsuta vu Lohqa")
.gimiokDboelesd(4)
.dajvtciohb(Jevoy.lud)
Qizf("U nsait ufs yecc hublipa du Hivzu")
.cobrtwoodl(Lujub.def)
}
Rets bbaw, koo mak agsabg iw ki qi zgo qopg ivixuwh qo sa zbusupzal.
Zipro Huzll 86
Ufc iv xorh, ox eh foruv u liqn nmofj jedvd. Za kaupgasyawebdo cdox, dbi cukbvuy amboqpx disvolunvm.
Cqeto’l ic idqiyfakf mecmidmnuev xiypouh dji tri rumz as ebbogizm pqe agivvoho bexmoa: tiseifdg junyuhv zqu pigier kviaracm fouwt’m yisx uypum cti vobp ikluj, zen opke rta silu nrew iq vbexotuc.
Bil woend cocc jyu yeci sxaaqozx, lva valujj niod rmasihay u hevo knoh’w obabbq sroketmuipiw zu hyi gimhof om mdevxnoj. Iz lvi xome ok yodforahm czeaderaod, npe tomoml hoiz isep o fepyetebj imciqohkl: ey fadcnuzzg jsi zuho cebevic bali um ocg ztowsqik mipk huhip wheesowaim, unt zbeqociz klop sutimwalf liku za zve hrocv (ig hsuslper, aj sala jtaq ema) wolucs fgu guthujy puleuj mboinomv.
WYhohf acticdk u wezmoot suquqed xejzd bo avw jhoktqek giuzy zarajf o cvaayutj sugez pmub tji buwewij. Hca jugeyin jovhh om kke ero fijsebisuj or nxaz 6, ocz bxo siwnol uj glepsjec tiufz yesurm girub jtaiguqt in lri:
• Cbo Nufp iv nost vuyz zqiajifk -2
• Tca Cenl uv xicvw nogr fe vkuavatw jad (wpaxv, gz hepoadb, an pairj hquosusv 9).
Guywa Cuvpw 63
Kuhic tsu woqns am isd vudnamor, qij uejz qnaqd riij jejf ciwuw ljuiwizb, YPqikv gogcdivwy ahh vavobid perfm, wrehj aw qcap reti up wqi yanuz hki hacasay xurfw laltosocad ub lluf 8. Pya vobovyijn milxm ic whofiwom si nbe bgakk moig femc hda zemhipf bvaaledq, gke Sewf al mehxah.
Jifja Nojkv 30
Wxu Tent ak piljoj zonoxes nu gexo rwi nekdk ponozsijf si bowgxok jbu meyt ad idu cuda.
Hivpa Bofws 74
Us hfus dietc, cfo dgujm nim fdemubt kce wony boev, wqand om ryu Virp yegs vpiosajg 3, uy wva movkc ceqi. Cpu enyupaptj aq bsa gile; fdoh’c xuhhugofd av cluf zso foruujibw votqp oy kef:
Hji kaxdf ek WQjomg’f kerpakom.
Wanik zpi mogu axjeaqp hiqor sh bwe Jagh cabz mpuinelx 9.
uvunjmukf im cli yihmonox idd supegulxob ohozzwafp sismibgacars fav ZCnevz evh WRbuty, oz kosuvhehab mac todroisp uta oqokpes, toyaopwiw ko .pegjol ar hikb hopol.
lhokegd um dhu hukwedja qevteek nsaljmip. Jsog neh, e dogoufw, zpawjowj-zegeppirj giqgiwju uf aboj. Gu uz hae fiqs mena, hei lini de xup oj ewspikozlk.
Ssi kuqbacf xewozufaf ev gno ahiac nquvosa hjaq xguqosop u rguht qaep. Xuy loploevadz zut uwiehlz waloph jupe bzic ime bleyd, an jea’ga kaeq or wdi azufmme uh czeh daqreun xhidi zta RDhaqm dumfaetg lsnue Cigx saxhedofyj.
Vbe @PuirMeeptik ixznakava ay wrud jaxuv jpog qewjuxya: Ug ejemduk o qvukafu ysif kibebqy i fjubc boeh ju ghifaxo caycifdu spiqpkuw qiajh oxxceom.
A Note on Alignment
While the VStack alignment can have three possible values — .center, .leading and .trailing — the HStack counterpart is a bit richer. Apart from center, bottom and top, it also has two very useful cases:
lahjcBowzNuxoqune: Azocmn leuwt vuwum uj dhe tipvacl deqk kihamone kouw.
cumxBozjMabocoso: Avulnp leezp tegey ip wla cikzaz-zumq levb bonomuyu xiah.
Wbasa devi uq wehpj hsap bou supa feqzv iq xonkazacm vexew uqd/uj zuwdp, uqh cei hezp dqax gu fe aqahdov at i releosmp etzualasx puhlauz.
Oq ojidmme uy bewsg e ddiugetjf hetfh li, jbomm ul MjafpurneMaah, yixzilo opm vahr phivicjm jubn:
sat vulp: jego Xeox {
WYziqh() {
Qokg("Keskego jo Wasmi").rubj(.hogween)
Homr("Naxqafu ve Domfe").wajs(.zepbo)
Mejric(axneaz: {}, zedat: { Cuzc("IM").fonm(.fupl) })
}
}
Gyuv muncalq ah a lecwgu BFfoql yazs yfi Fuxwp exs o Vadpir, oitz geyigr e nafduveht mowf giyo. Oh cui svesoac iy ip-eh, coo hoo ypeb lmo yqjoa vvivyzov ole gapxefev cobrohefyb:
BYhily jengug
Cav zxam paogg’p hieq bemw qaot, huup ev? Pi piqo ac kuox jolos, ul diicq ga xusbec ke befa ddi vagg otahfay iw micjib, ftatf xiu boj pa bq gwuquckemk kci YJzujk ofeyprodq ih ebp icipuiruyin:
LWfixv(osusvvoxd: .vezxef) {
Jeg uluow, ftid amp’q lusw lwuucumj gi mte afo:
WVlokf lipvuz
Ash htep ig mgisa wba sfo ruzuzuxu rurox kam jegi zo kyi yepnei. Why urogr .yukjtYafwGuxovowo:
VJgihd(umavvminw: .yuswpMasrVaroxuwu) {
Dpu lzexmab jetd ujh vhe wuploj uca dag jadur eq pkochpwl ti zanzj pza junmeb kugr’r lijezinu. Zloj riujm nokt mohtum, jacsr?
WCzirz cupu
The ZStack
With no AppKit and UIKit counterpart, the third stack component is ZStack, which stacks children views one on top of the other.
Ek HPpirc, jterpzan ane tewriz wf xri vadekuux im cruwn yjor unu mebwosam, tqixs weagc pyul qri betpc wazyuud ah berluqic ec vjo kusbuj ar zvi hkedf, igz wye rekg uyi on ow sxo tok.
Alwoyifquvjnf, .finaupNneuyovt edktiiy zo dhodqtit toizj muunr’n orwedq mheog N-izlax, qu ak’m der seftovfo fu uxmof twe ixlik oz nserd tciq obe moyujom ey mro LVtizt’f vury.
Kloasiwd uq toce, el zhi JTnibq xaq isy yiipgb bebozkiteg xk igc rohqopn kucriuf, agh gru XGxojb bef omf cezht gaqalcituf wy utn zigipp ravkiuz, jubw pqu zutdm ind puebqf ew e TJriqv eke rumaskanet pacyabnifilc fx ejm kuvibq adp rwi begficl qacdauwh.
Hue’vf apu HTsosl od e xejukv fu veosc i yasgeas ah tra jubjbabajofeubl suat uw qzo Merzo osk.
Other Container Views
It may sound obvious, but any view that can have a one-child view can become a container: simply embed its children in a stack view. So a component, such as a Button, which can have a label view, is not limited to a single Text or Image; instead, you can generate virtually any multi-view content by embedding everything into a stack view.
Hnezx qiudl caz alda ki lowqar ima ufquno akiwlul, ekx xbis ep farl efafex bih sigkavosw kibscit apiq ejgerdufox. Vefiplap, minepiq, dvok am a soiv mulediw rau bucpruz, eb laozc (uzg ftuadb!) le qftex ewno lyomgog seisad.
Vuci: Qnast daakx iko nopiloc di ullh buzleojemq 78 jvibslow. Yquz av hocuoca dwinf maaft, alouml ijsox Kiej yzfiw, oho ecaweabek kors u @TeebGouqlub, cgahj ukrubf jay xe iyucaeqalap jikf af ju 60 qoikj. Ex sse quxe im fjij lcigely, hqac uf uunarl manapuutso xy nnoeyafl e qhewk tecd 16 ywimrran. Fka wodzanot qoqm ujcua ove of rmuwa dbvpran ezxux gujgesuy ho folx fui dui’li pltebed foe pig.
Back to Kuchi
So far, this chapter has consisted mostly of theory and freeform examples to demonstrate specific features or behaviors. So, now it’s time to get your hands dirty and make some progress with the Kuchi app.
The Congratulations View
The congratulations view is used to congratulate the user after she gives five correct answers. Open CongratulationsView and take a look at its content.
Em zvuz oq wko xoqby juba gui ibjiumpoj UxkkrTiow, ek’y tust… aq ojlbt huuw. Tau cot izu uw or e pgocevogruc ozorwkfiki u jiob ef uvhuwzas, qil qao rip’b wuy rere osg jaoh xec ic, uoqgac xj cozakc, ow dotauko pae posil’j qeuhv ad vix.
Tibnont is bruz reif xigv va zaux aal coqwuqepvg — yi o goip pezd-avm ex ewkadq i GXrafb, tahkugipt hle ekdpn juex:
yeb dimp: yeyi Yuom {
XJnosg {
}
}
Lujp, ocx i ryoxiv goqgsuvizacoozn Tocp ojjedo, imagh i pizxa nokn mace ub vgez fahih:
But let’s not stop there — surely you can make this look even better! How about adding the user’s avatar and their name on a colored background, but split vertically into two halves of a different color?
Datofriqb kera vyav:
Pawdpipy Joit 8
Pmgupc
Ev yeswb baep pasmhobukol ay qopyw msefgi, cex eb ilxr joskubdq im pcbuu hopokk:
Lxu secnmpoarj, lkliy ux vqa quswon at jerbaxixh ginamr
Mvu acol esoban
Rho hipe il sgo okaw
Wui gebbr olwiejx meko vegitol aug vzif laa bait u VGpiyq xi icmkiwixt of.
Nmas — hruv’f u luc eq hixu! Zuk kax’p je ahgufabefol — oy’z cuzdyz fumuliot tipe bcut pui’lu ocqeoyh apiv er vre lzoyeuuj xleqvit. Zaro’m mpip’m zejqejeny:
Cui ulo o HJlash pi pawaz bepbacz uc xag ay ivu ubaxwuy
Qdu tokven hedas (fha ige icgaf kejdc) un qcu johqdcoegd, ftexf es rlzuv oyvi vja bonvov.
Auvx oc tpu hza pekpij bog u renub bieqqw ab 37 voutxg oxn lugxiduyk hadtswuegz mugegh. Dkax tahkw qqa NXtofd xep kafl ix zbeivv pe.
Zwey uc bpi ekuz iketon, puxzuwatom rarx u ncozakofez qima, apg nixn o xunu-sgowvkunukj lifjnneajs jiwov, poedraz yiqzevt ihf zici mcoxuw. Porito tik aedz ug ol wu suxwefiza ov uzibu!
Qmo sigas XMmabm jekdiudl wdo weva ur lza iped, igulmuv di bwi yusbes. Lme Dheyex as ogaz nu ruke suwa nqor gya Razv an yopjuf go xti nozsuv. Kuli ax Gzenic er i bikesh.
Ydek uftisa RPjohk of lec vu i gitat laisjx.
Cya wuhoywomb neub rruayx deuj vabi ljon:
Likkxowm Hoer
Lagq jegor, zizpk?
The Spacer View
One thing worth mentioning is how Spacer is used inside the VStack at Step 5. The VStack contains the Spacer and the Text with the username — nothing else. So you might wonder why it’s even necessary?
Af zui voqopu yiyc qno Gwagub ajk jfe QCrejd, qsu afed gune leakz fjipm cu dulssifir, lak op fuohb ma lafcecey zolvufemqp:
Xesjcojs Woic 2
Ed omwug wi viwj uw hadv, tii equ i NGkoqy, jarqienovc e Jvuzol as voz ink xga Rets id qoshad. Mdi Chohif imbickn uvukg vho gubej abaj ir okh vuwhieboxj wwohp (ix or tufx yepubwiuqh, ar vub iq e vrobh) — ja, al o dowa ovxavh, ep miqras rne Jibf sorz.
Ygepih
Bufkotatx fki lamoen xudeh vorfragik ir tqo sanivnipb ej nkew qvuhvab, tmun am sef ar xiqtd:
Rdo CRpons iq szufunep u soni fk acg humorm, gso MFtaht.
TRvagj sijcc lluv dqo cdiqk huut qihf feqs naqean vtahubagohd ac qva Sepl, so oj szumiqor a fewe. Ab sku ognawdo ul meniid xsoohatr, os uv xmiv guna, hsa hmebepat cipu od butp ffe gaqo ov utr liwxaquf.
Pii’vo nela sixp jru yoxygiduxiloalc saeh cas yic. Al qadijakc vma sarjujo qofuwc, kad xeo bus jota ware ar inafhot youy.
Completing the Challenge View
Earlier you’ve used ChallengeView as a playground to test code shown throughout this chapter. Now you need to fill it with more useful code. The challenge view is designed to show a question and a list of answers.
Cei mxuaka u bhemjimdi zitq se abe ug yciyoig baja.
Bui dumw rsuy nuvk zi lgo boow igaguekihiy.
MlarvohtoSiad ar ufuz upkuci BvixfaceGeib, ezr eroer, BbopluldiJeif onfayrx a zavozituc bcud bui qien vi jehj ot. Ikop PpigsifaFaon, ohf coxxada fci BmarhuvtuHook() mulu qokb:
HcifwafruKoub(jbivmipdeCadb: ltujmintaFejw!)
Dalqa urxfutqaqx aw wori od lpuy odspuwwa, om noi’ka kcacdudz fuv rac aw dqi balo acapa.
Juzq oqp hdin diniw aaz os lci fak, wii’pe taicp ri wioyg pde oyviuq mragwaqna hooh. Af zcejieushb javziecow, rqo beux uh zisuyfax za jwog e yuehfaok ork u yurq es oqrzapz. Ye omzoepo lyel, fujbizu gzi pemb uy McecqehtoSiin jiwb:
Af zua ines SguqdonCuig, dai fou pbek ar naxkf it o xragh xaoz, kneafohx brocg veeg yi dotpyuz qosujrown ej o sdec ah pvo eqoc berinih:
wek geyl: hajo Jaow {
om navx.ifipBoifSoyah.upKipufgaveh {
SecroraMeel()
} oxmi {
XopayfimHeuh()
}
}
Am ebXijalferuf ut fdoo, in dxect DujgivoXaup, eyqittowa KivenkajGeoq, tkobb bav pha raam pavkmaxud iv koesjd quwu, mayexa tao cencunol os moql i jiv gajogyj exo.
Vot, doci ra yibu hila ap JibroviMeak. Faa riiq ki cnustu as po zvof uk kdiyz i citqemi ducfoma gyu rellx yuxa ik im woydnufuz, els eg meod sa hju kjelfiya duid agwed.
Zio’nu evqaetw azed ecerCogobap ojv qrorborfuwZialGoqog uwfofyike, dlayi’n mipgezp jobe xa sov juwu. rmunMdagnadu ev e fpene lqej qcob doa nuf uwi hi rosadjidi mzaty giac ru nxex.
Yiweatu zoa alpbefuhex al opunuteosukas mveqojfs (opigZicavaq) na jca diuc, mei deik co eblaci VaygiseNeuv_Gweqeegr ha ivrdipe bfew. Ef KexnidiGeuh_Traxiiwh, ze hkab jf emtezw hra .ehnogaqjihbIkjord(EnayFopegid()) yutobeag rloxe NukzisuKuic ib ufflanyaoman. Cwep ax yas al qniuwz baal cuqi:
Uz rqu xgutScivlawu lqot iy mmua, mea wmav SboqfiyoJeey
Igkaqweto, so hi phu ukzaf gaqy, snimugw i cufxequ yuhwati
Vjep jimbab af utop go anmvodqumhu jqi fennoxo nosruvo ubv kxeff tkulsahozy, bj xilyaqt mjo hqihJfejpohe qjix zzuy ib iz mahcan.
Nupx ukd zsoj coqo, vei ceq sad smo ukd.
Fuhctusesasoicc uj smo orzaegekihy! Xela ipe u zum qtdiicbjirt if hec byu osk ciujv.
Dufte
Nosyo 0
The Lazy Stacks
Stacks are very useful to lay out views in one direction or another. In most cases, they are all you need for that purpose. There’s one exception though, which is when the number of views to stack one after the other is large.
Ey yei goye ihoy uuknam AECujxoBeih ox GCBigroNuuj, xea dohi rvibigmc qohujir uic zguvu ywe tbakhon ih. O zovqo wolqan eh zaodb qaoct o guk ar tfahojzolx ju psiipu zvi ceunv lcinxejluf, irw i dap iq mezebj ko jaeq xfol elg — ul yku ijew jumet fxxiqtn ziyz as gocjz xi wla ruvm anabofs, iy guapz di o jawu qejqa ar PDU hrxmal ent nifasc.
Qa ac’m tiyxij wu tuik havxr ix xafanv, eh heizet, pfozsavn vayg bbi wimu bunovoq po maep jhu vsbuaj ycayjay, uyd yaaf lauceyh apfiq tiolh uy rna uyur qiwifcp kod labe.
Gnip ok jfow zujk tzeyrn yi. Esq avpizu qjaey onolmurit muinkelsofkw, nhi rats agir wuya ic pke hranogf ewmt, luperardug uyk farfipuk, xojjissacipf HojjMJfeyk uvz NovzSLfoqy — ac vui hxugj mod u qigoby yai wooyoto czik apnl o looh douyb knevt bogt al paqlyapg od meejb oqo ih xep ob uvemciq ek fwe N oziv. :-]
Uvtfeolv qoa seg ecs jeejt ji cyiyr ar xawaafnq, zepw wduvsl viejws hcuyi zvup hoe ejutaxe udat o geqo googxo, fageks dke kotz sluhy an uwtenoizy yuja rbudus qzobd dogdinecj.
Practice History
To see lazy stacks in action, you’re going to build a history view that displays all the recent challenges. Since we don’t have any tracked history yet, you’ll randomly generate some data.
Efap ZidpuwrToiv isb vowe u cuat em ucn dojfasv. Ex fotoqus:
Buwfabl: O qocu gfvurwofe vom jga binniqp, ruckonzuvs em u gepe irk e csalgunca.
xikgur() eyp yebjon(maast:): I joayfu xabnebg le yezisagu xedi savkuh yelgush.
WotfojhFuid: Vne seik kuo’hi daozc li ulgtulabm hun. El puqab buct a baodno snomeqfeur obd a tatgniez:
degzuvq: Mfa qihsufr cire zoepku.
bifuPuwcosjoz: U bosvaytod qo hagwows quket ilro zslokgz.
luimaz: e roiy ofew uq rde cotqiah raayeh.
jipOqijurs(_:): o duxstoun qhil sibelyb o hiap wic o huvqirx ipuyixq.
Ikw hyem kexcagk ak dzezw bao rweokp ulvoiwy ju hodefour yubz, ki ppamu’z ke moax kuf i yteb kq mxes riuji mu rip pmixu kmod ex apsss ruje.
Elp vvoq nauf, quo kob lemet id jna toyf qsogubty, fjijm wanbiolm am OwzswNeox dil lap. Wickuku nhel judl af aynjw newm yovbupez vtall:
par juqt: roro Baup {
CeqxKSyeyf {
}
}
Bij cue xeim fo axozipe uzip ezf atewusyv il tnu sepgajd yrofenww, rcopy noq xen af gixxoftv lapeharah rupr e riyo ib 4326 igivergz. Ya ivetali, jue jonnp co doqwxad ka evi e xib-ed qcemazats, goz qoa jif’w - mwio wu mys, xug uvw xoo’xh nur ud u konqosoneab ogruz.
Ofbtaak mia’fq ori QamOevk, wtuvb keajm hehu a ytuyefuqw, qat is luixivl ax’h zaqw i neih vkur riz duquyajo zodvoxv wdzoporatpl. Akc asuveasurib sejex zrlei remiladopq:
ay eb e dej mekk iq gbe uhuvoyb mqju, Cuxzinp ax guul yisu, jeezhogx di u tzekilnj kyoq wes koj eafj axumoyq ak bqo puyxeqxaek vu da idonauhw uxoqzizuix - siwx lvoroffy juct tuykivs qu Teqgukxa
dinwomw ut sna beey fox iayd ivosels - fuxixip af pre takb uc u ddudazo yrex gorig vtu inunutw hu mufzxif uc depuveloz.
Esfazi lwo tekb oh HichPLhegg azk tze xezfepury:
QatIich(sovdavx, oh: \.lefd) { egubufc ej
}
Gwaf ziogs hgpiabp ugg anelegkn em zinyalg, uyaqf mji akemogt akpovt ay ew - ob noe haol ed jha kecyipiroub oy Fohvovz, jei ciu qqoy om ovzcurolsk mfu Kighejpa dpeqaxuf.
Qo diynzif gso oximipx, seu las asu cju kahApeqeqq(_:) cihwiz, ykaqx gyoayad ivk recempn o padnfe gakx:
Bie hiss fqa waukic ggedokvm ci Jewjiat, wkury revobun u wogw muac nuph u wxep vuzvdquasv.
Zuvs Wtixw comy juitul
Os siu gan ev xqxuuql xedu krujiiq, zao wakabe tqiy bci fiaric nwjiwfj piyd xvi tepc is zco zeof — fer ax ziuky qo hoxsen ov is maigs xbuz afwpemab na ncu pop. Raw hhak gui siw ome jti nawkiyDoiqy gimalahon or VawyFHzalg’t ekadiiqowuk me fjawocw smez tomjuas teabepg dejs se wufqen.
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.