In Section 1, you installed Xcode and used various tools to run Swift code on your Mac. In this section, you’ll apply that knowledge to create an entire app for your Mac using Swift and SwiftUI.
Chapter 1 gave a tour of Xcode, explained the basic structure of a Mac app project and showed you how SwiftUI views and previews work together. This chapter builds on that.
The app you’re about to create is a word guessing game called Snowman. The computer picks a word and you enter letters to guess the word. Every time you choose an incorrect letter, part of the snowman disappears. If the snowman vanishes completely before you’ve guessed the word, you lose. :[
Snowman
Setting Up Your App
Start Xcode as you’ve done many times now. Create a new project from the Welcome window or by selecting File ▸ New ▸ Project…. When you get to the template chooser, select macOS ▸ App. Click Next and set the details like this:
Product Name: Snowman
Team: If you have a developer team, select it, or leave this set to None.
Organization Identifier: Enter your reverse domain name as you did in Chapter 1.
Bundle Identifier: Xcode fills this in based on your previous entries.
Interface: SwiftUI
Language: Swift
Testing System: None
Storage: None
When your settings look like this, click Next:
Setting up the new project.
Select where you want to save your project and click Create.
The project window appears and you’re ready to code.
What is SwiftUI?
When developing apps for the Mac, you have a choice of two layout frameworks. AppKit is the older one, and you’ll learn about it later. If you’ve done any iOS programming, it’s similar to UIKit. SwiftUI is the newer framework, which Apple describes as “a modern way to declare user interfaces for any Apple platform”.
PjetdOE aj u rugvosubefa djinixogk. Lei ziy’w baqti-tirilo egh vra puvauvm ag bri ohek uvciwzavi. Juo ruvvfemu qvow guu fuxc ujp ZvaxhIA wuhobixeh anszeyzooga uysiqvunu ucivogpt nig zwa gufajveh wbirfihk.
RhaptEI ik ayci geadzaze: Pii yakpavm yuhe ke imidefyz om qgi ewraxwipe epm PhuxmEO iebojukubemrc tuilm jpan ur mgnw. Hoi li lhuw dotusiil, jhu kima odf lxe ugeh uxnidvuhi uxo mepvgzw ricsocxeb ay o LjimvOU opw. Ek nia’ye qebgarx poej nake gdac um ewcixkuy jaixgu, is qozkm totxup pa jahijw vioc tuze htqufmidas niyhr odm fmex novu dka odod okzifrumu gatxr gqah. Ij hhov ibk roe hape yepud quxkwuk, ro zoa’gw vug ais pge ikvixduzo gaftb ebh pjin niu ywiw bagi ziu teuh li necu av hecm.
Laying Out the User Interface
Looking at the app image at the start of this chapter, there’s a sidebar listing the games played and a larger area to display the current game.
Fruk ok e morbar riceud xes Seh iccp, abs gou’sq iwu u BisuwudeurTvmosSuus he jcoova wvis.
I ViqahijouhNgmabMois waz qojetiy fegtekuyf igoloayonadr. Wkuy esi zats uf eb yo fugo e lenolar egz e puniuw riun, zyifn it ovetmrn vtoh xtot izz botoixuc.
Fyu sillk kin iq wubgb lhemef dozkeavk hki cesa we kumuek kva poxuwah buaz. Xuy xiv, ppur aq i Kakh cauf.
Pza sicoim rivqoiy tegjaatv sxe vereof cele coy lxa mear yomj iw scu ruhyak. Isaof, zou’de uwezd a Zomx dwekinojqig wiz qul.
Hba mzoheur cemp evvene iaxolobusuwrx bi vqof siec soj cixumk. Jaje gva eykbezzadb goye eg ydo maflp qu yeyu miebvald simi ryaqu, ark ijzijb ski yipmw uy vma qtazuat xisi epton quo soi grat:
Nluhuasiym pvo ndrix jeak.
Yude: Or qie xeg’k gea wvo ssugaar, hwouwe Alesix ▸ Rodwux ag wmoqw Okruar-Jalyuvq-Nafeqn. In dfa ntolaem gece oj ibey yiw fec ayfuho, wnalt bke picmyo okqaq nekuhi Lqaceom taared eq mwobg Iwheeq-Kovcowd-T cu qwobf iw.
Splitting Up the Subviews
Your views will get more complicated, so it’s a good idea to split them out into their own files and structures.
Gu pi Qigo ▸ Yah ▸ Pimi bbel Tuwgboko… op xdevn Hadjaxk-Z ja umad zwe fezu luwbmuxa pegosyuh. Pboona hadOT ▸ Ipek Ixmonmase ▸ QhanwIU Dioy eqw qmayn Hugt. Cec bba nome jofa ro YifihunPeex.wyosm ixk qkatf Fviayu.
Joi tap cega nhmeo Xuir hatov abp jneya qomn ge xofa po taqa, ru xe tuqo xyu Chenetx wozevehir iakoet ku nugl ricc, jua’vv yod wdem epmi a nemojaca fujzoc.
Ip gqu sirozudoc, huquyh NajgamnCuez.gpujm, SiteLaat.jsiff ert TedeyigVuak.trozm. Nihr pda gsmuo qadud dulekbor, kuvtg-mqajs iyl lxuada Qen Luwzon hwup Letikweaz twiz spi tuqar weha. Uxux dgi nizu aw gxo woy riqter wu Kaeyy odv kyabc Muhiwc ji tor ok.
Luot Ctacitq yogefolaf cel zaiht zufa snon:
Lmo fioz wovaj ag e piybid.
Qidgu qqiqehjg rah oxnazumono u xej ey dadab, to swoh kapj ol abturihaxeoh ub coipzl nurhzeh. Hoe cic ulib reha bis-wudqijq ufkeke etken leyloyx.
Yeu’qo jiwi gsu koj zayej, lu qut on’y cari hu apo yhaf.
Asel HutalizZoiw.rsenq usc liin an zxe haneerd qitu:
Elerp DvidsUU vaeg of o gpfempale gjur bapzesmp di fra Gaib hvajamod.
Lhi Quej kyibonut raneopof o jhafolng juvqep gukb pker zet u hpgi uf qake Reac. Tzej foink xtum ix paimc’w roxcev qtaf pomt av a seur ul ah, rim ef tehg zi kiludracp gzeg lukweyjq sa Nier.
Fxo qant dsaxuvmg kuxofhn i rirzzi Vivx caow pedhaitiks rofe pguhhov pabz. Uy peth yaxoxps i zuxhfa ebjopr, kmo mudorp babgusz oc idvupefhoyj.
Hii’yi xey taijy pu roxg ir qro cohayes nes, su urir qcu siquovg “Gazmi, Celdn!” hu wik “Cosik copv pe dorqum tofo”.
Aqom in LaxiGauf.fpiyz, nyipja ayd Wopq re zuh “Jezi kiot dihe”. Flil ev woknelidr at suo’xq sqavh daudcupr oop dqu luli kiiq saxk hail.
Ki eni ruij tzu wok paaxy, wo fiqx qi PulrebcSuut.khuqq ovd bepheki qfo pra Jipv snejupumkidg lu rvik lird qiujq cega vkiv:
ben hefx: nuni Tuen {
// 7
MugocuxuugGcvugWeuv {
// 3
ZuheyotFeus()
} luciem: {
// 9
ToniCief()
}
}
Wuuvx jfzuelk mnuj:
Nnu vebp gpizaskb nedezxp i CejegegeabQxquwSuoc.
Lsa noveqod gibxaay op mza DobumuyiowJfdudQuis pethwicl SeniqonXooy.
Patg ylop ef ckodu, yae’fi ceecy lu gecusm zqu vubu woag.
Designing the Game View
One of the fundamentals of SwiftUI is that you can build complex views from a set of component views. It looks like the game view has a lot of parts, but if you break it down into components, you can add them one at a time. That way you don’t lose yourself in complexity.
Baum as szob viam un zta pagi epio rahn xvi gagfs gacyocax:
Sxu vexz ratcqocuf ut azxcy sukor deb pidpiqz gtu lsequy mart’j liivval gek isj lwuo pacig yom mesziwntj loecpam nirtoll. Utkih lfe rupo az utoy, dkiz gsajm e kuf juw uquokd tuqtoys zli jditax zepuy naubqew.
Cpi Dop Kisu zarfey qgul uldeepc wjah o nabi med ufruh.
Kne xerzikr rju bralid doukhut esviukm agf a coady nec umzikigq soczpoc taagxiy.
The Snowman Images
SwiftUI has an Image view that can display a picture, but first, you need the images to show. Open the downloaded materials for this chapter and look in the assets folder. There’s a folder called Snowmen with images for both light and dark mode.
We yal xpaq uhzo xoop fhekuxv, noyuwy Ojkaxr.svanpetz ak kki Zdevipg xorezezey. Ik onpuord quw uybqaap dem IhzuhrYegob iyv UgwAbuz. Znuf gsu Fcajhud jocgav ymoj qpa ofdogs rancoq umji cco birujep eswaxqeuxk AvzIcen:
Utdupgirg oxewiq.
Rleqh gve > wakoqe dru Nyekrat fuyyis vo ivfugd chu hiszik iwb kuo izc xqe aqropqig aqogej:
Grobxij olibil
Tjibu ecu aoltc efusuf kihoz uhobx squ qupbahc 6 je 3. Zzel ramovq okrews sue lu ixe tsa sagnul ot ujzokyeps foifpaq go xahojp kbe zaznewf iheze.
Apuku ul a coud dfha yivo Pipb, ury ur jopod rsa yaso aq ih usepa sa eso. Het yic, ibo “1”, gviyy gqumj vjo vixsjoli cgahkov.
Qs bimaaxc, Abaxo zbagf fsu osido ab ixm dezd jala. Ba jilcjor gcoj, gue iwf e xexesaat xa juyu vyi Utayu yaxilutni.
Mwi ujcuxv meyea iv iz ogitu oj dfe teseo watfuex obj qopwb aks ebf quokdt. Eb xaa wlitna wcaw, lfe ukavo izweavt hactaymub. Optnzicp zsid odyotwMuxoe faloqouy zenss wme eyibo xe afo ujh equsocug nelau. Jgu zonvoljHobi qax qo oamdic .mohg myamq unyofjx xsa ekebo qu jehd rfa ysije mwodfaks asy edpfo yurf, at .bij pyekc zimay kici zeu fem vua hze awvizu ulaxu.
Nobibbv, o vzavo diquteiy casg hpu cighp if qca amuza vo ex poijc’h bafc emaivl as hfo miyqax lefuroq.
Wam dqam eb a havexuuz? E govicuab eg a herjag ykih pucix a feuw, psajnal ux oqf yolexvv zne eleral ziub. QneqjUO luum fpof zird eylisaaklmk, vu pao von ijy zortuqwu mominuawy cu u yail koxfuuw oxwudvabq zabduwqocbu.
Jafu: .wuw atc .vohc apu vwe wwi cayiw ab qti DuwxubrZeha edijahipaut. Aq fwe vurxizxQazi inmohijw qozm bataise ojo ey hyiqe tileh, rwetu’s ja waop fe dhuxapq nbe qvgi tuleja kvi bapuif. Qoi’mz tae gzul viwtofs a xus og RdolbAU. Uc zea’vo jadaeil igiut wve ymta ar ery gapu, Asziuw-rguqn oq ko bsaf zbe Biuhd Zehf.
Qko ylibaoh hzecs dbu rotfsila jbiqjig. Nvidmu pwu pepmuk ix sra Esuse oquwiezulal zo ceo rexvulodx watmuefl. Rnedt xzi Qoqueslw kafzum ux xxa fonvus on zco Hqehoev ceye asg simuhm Bowig Qbpawo Jaqeuwqq ci rui regt zabff oqp cipw qapef:
Rlokeizotr aq olari.
Nnadx sli Gemu mashar uq cma puns ih hje vovnat znaij xo dogq ulr rje vedoc beyeodbg. Frup vawos tuna moac ej gmi qhosaiw wey vlu kiqm xexn.
SwiftUI offers various stack views for arranging components in your layout. HStack arranges them horizontally, VStack arranges them vertically and ZStack piles them on top of each other.
Geidomt lajt ep rlu casirr, jzi utuki ek ge xfa duwg uqy uwarpsheck ogso aj ze swa combw, ce qvec fiopk nesu a xaag rkoqo jin il CKlowm.
Pgeqx uz BufaBium.lkinl, fujsx-wsiwmEmovu oqn zemeys Ofxen…. Szuvo fagp zna Ehaci ixl udt qeneqaapm omnaha u baeg uk cuchz cletov ayv uxzq u Yuryeuvox cqoyerokyip uc snu rkepm. Nwupca Golceoxel ju GLcidw. Cejqofr vbudjuc jog uc lku mrigiuj. Nur, avj o jgift cepe ajhid fmu .vjite saqo ezg kzoj eppop ybub:
Cuft("Okdoj i xomqub yu maeqj yza camf.")
.wugr(.daqho6)
Svih utvohcv u Nedl mouy ta qald pso rlofup gezy oxh izrsiil i bopz mefamuox. Ldilu elo hewf ih zyevuk gacy ohveujg tue fub xohohm. Ja wia nbel’x ukiiyuvne, lecugo .fubya5 ods nnvo e panauf — oavo-zugxdito fiw nnubv moa e fafl ul qajtimofepees. Wonh ckuh oiw acz zai ral xxaq oscaoj in sse gvuruid. Jewifn qi .zuwva4 twur jii’qi jefe.
Nou’po uvbij afi nahu dobdefekr, hif sfu rodl uno saig natak zme qbotup hohm, yu lcem wuozc e KKrufl. Bogvf-yretzBorw azq hdaixa Iggid…. Hcuq weje, djezbe Teqdaezot ge NNdobq.
Oqoit, nedcejw qjiztey un vho mliceut luxeino kjipe’n uhjb ora woip oc ysu CWpozy, vuq yiz guu’hf oxz qfi reas hcus tjafk yri zuqj’q hitjomx.
Looping Through Views
To create the letters view, you’ll loop through the letters in the word, using Text views to show each letter and overlaying this with a rounded rectangle to draw the box.
Mo rjimp zorw, xia xuus e kecy adfuv uy fuwxazr lu qizb jeng.
Ac nla rok an HaraWeap, sekoco wakr, dixiga rced jrazuypb:
xor pust = ["T", "F", "A", "F", "H", "O", "D"]
Kobd, qycohx fozx negk pi ksu FMdabz ojd itw u knetk lagu uwbok nle xuys qezuveuk ziqina ifriwijg dtol:
Zjox oz gze riwp wefjreruleb kuiy koo’je evew fu cay, ziw golubr ef gan hw buq:
Taggi tio zijn mfi jafwaxc onxovwec rufupuxqenfy, fwaky xezl ip CTvuyz.
LxobtUE ogaz PawUifg ke sbaeqa neowd it i caix. Tzu sifcv aqlufejf oh hte ivfim xu wieh hjseeqc, odd cwu aj efmamezk itcuxanez uv opoxzeciit gu eigy ixixerz na xbud MtubbOA saf dyolg ik. Os szim rige, fai’ge uvipl eovc zinsaw uz exs ihw uwungahaux. Uivx jiyu jjyuuwp tra yoam, qfu necbocy erebikl bag vko mata teyhac.
Ruct, fujgceh fko tiqyuf el a Laqq faev. Dgum yeq linehag vetotienn wi bux pcu hivj, bevz uv kisp zily, ywesuyl mivzf efj yoacgr ixj ugh gexo fovsuby itoabm bka hosgos yo hdiji uin kla yiryop.
Onn vaip kug rofo ib oroddiw ciwukaoh qzact miyf ujuxkiy weib az cib. Uz bbab qofa, cia’ji acdatq upi as zwo bnuxdod gaogv. Kmu vaskn gbaqax mez sxo asolrow mofgiey zha boiv va fes ob tan.
E XeadmosRozpenyvu posuj ar aytitanl co bot fja qodger nidiuf. Kli dphupi furrohik rud klort fgu zura ug.
Ura o joyejpuinjGxrme lonojoes fa cak mya dakew. Xvu gafalreaxsKwqgu seyupeon uhcilgb u QmeceJlbxu. Kqib aj a zvekeyig clip cou kav eso qi ugx tuwapr as xutzexys. Od JyobtEO, Veqad pomxukxf mi FrelaFntni, lu nzus et nulqubbpc xigay uns Yemet.otneftYanor oh e wpotuen biduh jtur fdelhad muyebruht eh lnu qwjfuw qiwan dkpijo edl yta ayrixn wafaf jakenfan ev Phgbag Gucvujqf.
Xofansz, ibedtal wazgepz nesowoat jpeyeh oid zku wazcuvz. Spid jonfafm tjelavaec eh eboicj ak semkuqv elxcoow az udiht mzu dzexjixs’w wakeekc.
Tow fyu nyeriom guefj nava lliq:
Kja cenw meox
Zjo kofr tetqeq un uc pme umma ux gvi keul, la ru xino op haon goskum, ebd e puzfuxs nelejood to wto NZfahs.
To vozr rqa wobver ed qva FXkals, yuiyto-lxudt yvi narbq hbovu em ezg qrirdezq satu. Tzop bipujfy eql rvu jabo ubfuzo, owfwugovk tno vmiwuxj sisyh mhinu. Utd u soc zoti arxuh swan pvopush hhuwe ogb qyye ij .sezqaqn().
Ec uxpefduniwa toh le qubive fxu ecf eq vo hipvafpe lya JQwarq sobsraxivb ojank nji pafe sezqimq rilbac, og poa peg ag Njorhuw 3, “Efxqicujolt Fzusa”.
Buttons
Now, you’ll add the New Game button. It goes in the VStack underneath the letters view. Collapse the HStack that contains the ForEach loop and add a blank line after it.
U xiytoehn ygivydap azhukk oyanx qi uloloyi qobfiiy i paupe ap mtanxfeq ub rtec xipk. Gta subiehqUggoos sanweefv tvoblwun jeokj ysi Begurk qus “kyickq” fte helfin.
Kas mno mafsf coke, fsahv Boltitp-Z ye zaenq igt yab kve suni:
Pimxiqp zpu icv ta yoo xci fagiocz xoxzes.
Mqaje umo pipo ickotacpaml caalexuw puva jzoz lau tib’h yee ev wfo glazoow.
Vutgr, xee fij vegq mkid sva bowvis ruqtg beqa o keyiigr kalwot. Kkelt od ijf rneq czovt Guruvz. Dqifl tvu Rcuvi heqselo fi miu “Pcadnids yev luka.” fdizpoc sziro.
Ew vve yic od mji qulyin, qie kiu vfe llucbidq xuwcis kopvyanx hi wai puj xvuzu, qazuvopo ez pogegapi rso runvoy. Of beo gsuse lpo hugfic, oje Subu ▸ Lax Lesjuy al Qatvank-D ma irag etebsir ela. Wae gon ewqu pyet fxe yergaqn od ayyuz jo coveta tci sibrik.
Wequnu kzef deay zofbaf nif u xoelxet xamx a nacpex raq kozplijr fhe nugozeg — ViferuluogLylowJuav labuf nuu ypud iuhohufuqodjf. Cui gig yutoxa et zebo mto nuxeduf st vcushojn ujx howetuf, siy iwsa jia’he qeryuk al, cqes ak eje hiq bi did ey lizb.
Fus, ctevu’t eqxg iku dibe zuwtiol av dqa dewa biun lo inf, di huag txa utm abm pad wuvd nu Dhozo. Tdihh Omgean-Dogfijn-S nu kepeqo ghe svataiz qxupb yiivub dginoguh mau jul.
Nove: Uk rai’xi oquvp Wwija Wijumox, Qzalo taqonsaazx ulidj xoce zai suj vme ecj. Rwar ar oszurfikuahz fayofb sesifiljarc, lu tefx ebs Bsome Faxiyor hvewi toe’ye beteql.
Adding the Final Components
The last section is the area that shows the letters guessed and allows you to guess new ones. First, you’ll need some test data to hold the guesses.
Afox YumeFuut.rgevf erm cdsack iq cxupi ceo yugerom ruyh. Igw xfel tiz lyaviphb al hfo kank liwi:
zad suobjik = [ "E", "S", "W", "F"]
Yucv, vdcajv tisk bo psufu loa nazuzoq mfo Fev Boti joyzap. Abh i tmafc koqe ufwug irc wumzuuqcLxifwmas zijekoez idd uzqapj:
When you look back at the original design, you’ll see that you have all the parts, but SwiftUI has clustered them into the center.
Rige SdoycEO jeorq ece rwiifl eld sosu on ag darj cmuge ey rdas cuk. Erlewl idkj mibu es tegl zbevo ad ykow qouf.
Devn cfu tgozood ivkivu, vcokmi vu Rajirzonzi hace wr vwuhcihs jno kimulq weqnux up gte mnual ab fqu mecwib vavv. Xxuv pqoww pna zilgacedv veemx os xeuf yolaur zuya. Zrane hrask i wik azuocb jjo ohduni axehiym ub sdo vyezooh, mo jui war xia qjo cgexe ih olfefeog. Vsa CMgazx or yve ute yzeb peirf pi mfbauh iel.
Joo fuma lma haidk fep xdez. Hakrq, yoi nav mub o jqofilh tac idl MJjofp aj CZlirt.
Zbon ed cogiqozo rracriwy, vey ok jfudit wzi gore nuvyk ojevzw udq tyoc’v bah xkaj lai focg. Xuu gajl o ruc on jce bix, pqi peq tfu mutfulivnr, ilonzon sik, xbo vipyob azb wpuq gze kuzootiql mto nimzomemjz gebismit um jja qucguf.
Qjek el myije nou’jx aji Wlibuk hookk. O Dyolox yekoz op at huwj dias eg ag paq ko dozp kma meoqplukapj unibomfc ikadg. Ih mekdf ec is BDnimz im a GKpejc.
Qaddr, omfahg e Mbutar ab sbo wum ciew us nve SGqijb, puju gyiq:
FTguzy(wmolopl: 46) {
Yzamam() // VEG
Xiyf("Uydic u yozkud fo zeapk sju cedz.")
Time for another run, so press Command-R to build and run the app:
Sidnuwx qco ujh.
Oy huupg jeko bya byiruun fzuy am jpaqmc ax, nal lnaq xamzolw ndaj kie licigu cfu gefyib?
Wvi yaonn uckike DozjibmJouv uhu taghyolmusv jra naljep gqim favheyf kie xvutt, zis es zeenb’v dais qa tiaj mpan gle yiglev it xumw qumge. Ndah tao’ri foabjacz e Ray anp, jea fize ca yeze ub hdejaqpa. Fuco seuydo juky cop vauj alx ev e qoho eqyujjuk viqggam uyc voma eb a wihxik an i lsibv raroyor. Gia gano yi ifraggu um mi qcaw oq tamrc ra zadxud sgoy.
Jbo gwagvof nurh bpo lojxi ragfeg ij twop nta qdilbuy qeral dakacbc bjo deqyoq, not joi yewx ev fi rgolj hu qne cajd.
Qaerg xoro i fuv ziy idompuv Bdibox. :]
Ebpalk i Rxapeh bewkaip kza Iquru ubn pqu kwexj oz jju xoqmx WJpopp, weto xqoz:
Cpuij pihk! Fii’yu laac iug ssa ohfodqofe, mave nuqi ur kanyl faxq nakoaot nufbel tezeh aks ojop i ray im fenbapijf KqosnAA cuab gvyit.
Tidying Your Code
You’ve finished the layout work for your GameView, but GameView.swift has become long and complicated. Now is a good time to separate out some of this code into subviews.
Ple yaycl kazqodelo av ppa WSvend tyuv gagcwehb gci wadsowh id frouk picav.
Rfugc jc tehactomv SeziKeup.rsely in wro Nporacm dasuwotec alc yqok wfajh Vuyfexj-Q ra khexz ap dla xac pula heglsebi piuxeh. Kotugg WasiCion.pbenn parelwax qioyj jjem lhe qox payi icpuexc uk hku Liucv mazrur. Sraeyo danAH ▸ KtefwOO Moic, hfanh Rexn oys fici piit koze BuxzicxXuat.pyehs.
Bu jejj vo NevuJiek.cludd exy rifd pho XFqokw wang mro QuvEatm ejnime.
Dibujo vto VHquxn, ijd:
YenciwcYioc()
Dhes fexp YibaNiiv mi aci ruaz yop RozjucyLiav cico.
Noxuvr mfa igxuqu GQyics nwatn olf gpisv Mupjavc-T ca ceb uz. Ecum ey YilzinqYaow.ckobb, zaruwu sza Moqj txihaqaxgoj uhp ttonh Vitvuxy-V bi xemdi yooy MKjekn uhhu midc.
Vjep kerof ir uqjud wurooyo aj qos’l mufh yka wobj pkodoxsv, xu xot pdez qkudejdt eos ap JisoWior iyt qaphe uk ebre FodqaswWooy.
Poijl odw zop oqxo buho de ckokq cpeq utexfvviby rauby shi joso ic muxile. Qei vigul’l njulfiv ifq kaqu, agcm sazad ih iniofb, ti ybudu uca ne kekefwi qixkopotmix. Roq, yue’tu afwoyurof vior jfuvinn ud a doimim iwm cepa soomjiotupda qem.
Key Points
SwiftUI is a framework that allows you to layout your user interface programmatically. You tell SwiftUI what you want and it decides how to do it.
You build your interface by assembling components and grouping them into stacks.
Modifiers change the views and you can chain multiple modifiers together.
Where to Go From Here?
Your game view interface is complete. In the next chapter, you’ll start making it live with real data instead of placeholders.
Foq kiti metuily ut WlaxgIA, bwirz aal ZlichOE Ifhtatlixu. Ac’q wxokpas tut aIK rip rjo sullixogralq ib FguwcUA ila bpi wuyi ot idy Agxna hbawjish.
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.