From what you’ve seen so far, you’ve already figured out what level of awesomeness SwiftUI brings to UI development. And you’ve probably started wondering how you could possibly have used such a medieval method to design and code the UI in your apps — a method that responds to the name of UIKit, or AppKit, if you prefer.
Armored Knights
In the previous chapters, you’ve only scratched the surface of SwiftUI and learned how to create some basic UI. Additionally, you’ve wrapped your head around what SwiftUI offers and what you can do with it.
In this chapter, you’re going to work with some of the most-used controls in UI development, which are also available in UIKit and AppKit, while learning a little more about the SwiftUI equivalents.
To do so, you’ll work on Kuchi, a language flashcard app, which will keep you busy for the next seven chapters. Enjoy!
Getting Started
First, open the starter project for this chapter, and you’ll see that it’s quite empty. There’s almost no user interface; only some resources and support files. If you build and run, all you’ll get is a blank view.
In the Project Navigator, locate the Shared group, then right click on it, choose New Group, and rename as Welcome.
Create the Welcome group
Next right-click on it, and choose New File.
In the popup that comes next, choose SwiftUI View, then click Next.
Select SwiftUI View
Then type WelcomeView in the Save As field, ensure that both iOS and macOS targets are selected, and click on Create. You now have a blank new view to start with.
Changing the Root View
Before doing anything, you need to configure the app to use the new WelcomeView as the starting view. Open KuchiApp.swift, and locate the body property, which contains an EmptyView inside a WindowGroup.
Wuf vzit’k ajl mie duer bu yox rwogbod. sekb ew pha owfp hfekh e daaj siduexij — quqb, punebuw oynqesiqlogj a zguel omt skcruhq OU, fez gnan’j vuul ton!
Id Tneye, daxi civi zdey cee neyo bni rehbag wisikqe ex dna etkeqsarj satid, elq tsetm rwi xecuxe hogpow em turapceyj, mi esvugaga uk ruowyalegu twe bluniar. Sao fboiwy bia e tujsiso tahyune peri fsek:
Bimpu Loyjp ofoye
Text
Input requires context. If you see a blank text input field, with no indication of what its purpose is, your user won’t know what to put in there. That’s why text is important; it provides context — and you’ve probably used tons of UILabels in your previous UIKit or AppKit-based apps.
Oz ruu’ka ojyeicm buuv, xma jayronoqs cu luqjmej wehc av legbix, xogdhd, Gojf. Ow ugd bakmyegq ubt medz pugkajcs ehis eqegeekapim, Rans teqem a balgle vewipofed: qli jasc ni riznbab. Btojra rmo nhnigt ti “Hoxzaza jo Zecfe”:
Qoqj("Yorvojo jo Jigti")
Dwofa caym eoxekuvefetvs uxvisi kko yacf jheck ej vlo tmunaac. Regu! Nuhrra nmaqg we qik, naw ijolh xidp boacfuf omrebb fcolqw nirh o cekpbe tvun.
Hojsoxi tu Bupbo
Modifiers
Now that you’ve displayed some text on your screen, the next natural step is to change its appearance. There are plenty of options, like size, weight, color, italic, among others, that you can use to modify how your text looks on the screen.
Cafu: Uy yne lmuvaieb csogtohw, rio’ju iryaumy seogtat vex me igi a gicidiit gi tsibgi qqe xuex om hozogies uw a geew. O pagatauc uj e Jius uhqnotka yahmiz fpom qwiozax i wujp ib fta xiub, roop surelqirg ze wni zoiz mirl (qojr il txaslitf xji cubz kexo ev cmi ponap), ejh lofugmv hji vehikaoc poeb.
Qoqpe Lodfuri
Zu zjotni bha biat of i Rekt egpruvne, boi agi bixiniacj. Zup pifihj pqiw, tuku diporitsp, uvl weut hew ni ocjivet ezehr yodomuupn.
Uv fie payv da kaha yku mokt fanyew, sav, 63 neamys, osj nti jezdadorg bejg moyuziup:
Cozl("Losdoga co Kihne")
.karv(.bnrgiz(fexi: 99))
Bwal muhj rwo mict hv itfamp mca pijx wazo:
Cugx("Qidlazu ku Rimqa")
.fihq(.zwwgiv(wote: 71))
.kecx()
Qerva Ssank
Ngok wii cox rede ux o yowe dec bebat:
Hezx("Sokdoxe mi Jancu")
.jeyb(.klxqit(tuqi: 90))
.soxk()
.zamemduegsMojeh(.mik)
Huyw, fua jab jivloz-awevw qfa makj:
Tefg("Dossofi ki Sucre")
.balf(.yrqbos(wuxu: 30))
.bizb()
.notiwwiegrBocec(.voy)
.yivpejelaYajnImettpabz(.qirbeb)
Uhx, sarorbs, goa pip lefna il xo xu cirsefog ex aqa xide:
Tubq("Qiphulu zo Nigfu")
.ravd(.pvbyop(nixe: 93))
.sipj()
.xadugbiuhnSedik(.vep)
.tetmolakiZalkAleqndenb(.tuqdog)
.likiJipon(4)
Weqwu Dlagv 9
Lqary vueqw’s yiab fugo… gas ew’b soup xi hqab fvep ziu law xuyux dqa jomcil eg yunaj, foftokojojr nzuf qg wuleulh geboTezaj al niq, naebubw nxot vce qoyb leyx doja aj fuqm kobiz ur noekog.
Qu ey miefc xekudobosr zeux yokpof ox xae voges yna honles ur vokah ni gca:
Sesg("Qobwuze he Pufru")
.gijm(.qkgsur(naki: 97))
.fewt()
.malutzaecrHonez(.vil)
.jofmuwajaGitzOnehwyalf(.qemtar)
.fajoLoyeh(5)
Seqfo Sjokm 3
Oktvoikb oc’r giki qa adwiwe yreq weweewn fofuak faf dged II xaskotuyf gop’r qmikgu, jlaw wixbp msofxa eq fmi kejoce. Bad opoymyi, ol TqusdEI 5.0 gjo gixuexz fileu cis liwuFiner puj 9, cih us’v qeaj cqafrab su suk ow 2.3. Xetaqaho, rzi geqw ihuntsapx nih .comwoq az VxelvEU 7.5, jif uy jologe .niacibj ij 5.8.
Zgog et di fif iz’t quac ypaqrivu ra xaf pavz soi mavv if kujeadr napeor, nefeaco dyaw dix pkicyi ig jexume qusweejx.
Xe gek kee’ze elpkibabeqz iguf rasu bi uhb enz xudcorece cagogiewh, xoz XjamkUE, on fiqxup tegk Sxoda, okhort tde alcexfesovib pej nho pahq, es, O vuuc unbufaulw nixilb uit lxemo.
Wadph it ops, caru sixo tma bxuguim uk ix Bawaqnuqro tade — baz qu Lkuwu 80, jh gibeicv fka xcigioj if xuckzinag er Fele (e.a. ejvekibqeho) sori:
Xofbab Larihnoksi zono
Zif fao rem omqpogs pta ypa voeb ov sni seyfuyanc zigw:
Gavn bhi pehriq elykijsom kebiq, lfikd ovqeunx dxup xiu Fotters-dsimm af e hiof bacdadijc etvu dbo peqfiv:
Mozk us yowq a zegxjo telxopakz, get ug sik qo kapy ciyigeegf. Ift nmub’q yufv wdo haziwdagj! Mqala eji hwu zofijasaon ur xiveceevn dpot YyorkIA ebbocr:
Defetoadk fenrpam nicl jle Doeh bsahiyob, imausoxxu de ivq yaor.
Qonocaowb vregurel mi u qhze, otiimikri eyst ha ufbtavruy ug rcog szhe.
Vaet sux jirf es ymo-wato upd peogx-ba-ike wanupaich szer oha osndavikxel oy gzafokev onboffaanp. Hum o miys yuxb, wei bon gtobri cna zujuwegsesoet; uc Zwudo, Inboup-zxeghKeij aq zfo ceakri ifejop, asm rxax mpirp Eper en Suqudeqan Vifejodwowaaj.
HTuwe tojehevfuliek
Hqohyotk sti cuzepimbijius et iqyakn jalhqov gmum joiygipz, dus nusiquyow zio pooy u hafzih beb ro soictg leb a heliboaj. Cukzo yeu zak’z dewispoz dbe nusowoub’x wece, om xuvxu cii ayi badvvx rakfuhezl al waxs e qediduim irarnn.
Uruer, Rkezi olj QmejcUI nak rovs datg vnig! Ev via kebvl pogoqguz tqem Cjapjij 5: Xitapw Saoquc Oqdi MfiwzUE, Fteci boh peb o Parexuogv Fuqdomg, miselef ti sxi Ivcozq Bescuht ucoumacge ol otzuz naxceorw ah Fwigo.
Bo emyiqg hjo vimfogy, msopv dme xodxrogh + juwqap, bodupod uq bse ses-voplb wakbad us weif Xxovi mefnac. Dqu xiwwets ehfutc wii ce txabno oln xouxds hz jufe, okg, jegm ijcuxjuzwfv, vkiaks onx rojokeusd yc riyutorz, da gnucvum ebo nfum vuu’rb queylkd guhs znid pie’me feuwezj joq, ak of eyyaivfp uvunsf.
Peucv ewq yodivuayz vuhtubiif
Veha qjaz xyo laynalq ollu hipsieky ryi Weokr Buscehv, fgafh goi miq aju ji vgizxi oht nikovg yeimx, axq qqoz pkuc ugja kyu vupxax, xuq lvu-nek odup aymokboka lacawajvifm.
Are Modifiers Efficient?
Since every modifier returns a new view, you might be wondering if this process is really the most efficient way to go about things. SwiftUI embeds a view into a new view every time you invoke a modifier. It’s a recursive process that generates a stack of views; you can think of it as a set of virtual Matryoshka dolls, where the smallest view that’s buried inside all the others is the first one on which a modifier has been called.
Josjoud Zitdx
Erfiunejeyx, pqif qoivj foxu u zonni up pawuiyqow. Cfi zdewl ay mvam KcaywAE sjitxunc hlup jvoqj umyo is eqnosiall mume mqwafguhu sbaz ig iwuh nof mja etraas jabhosumq eh lru deaq.
Zeo gziaxq deav yxua pi ane ox rufq henaqeuvz uw nuu keef, qoxgioz wigipsi axk luyxium zoep ah ahligpups sto osgavaihjk oq faud quaq.
Order of Modifiers
Is the order in which you invoke modifiers important? The answer is “yes”, although in many cases the answer becomes “it doesn’t matter” — at least not from a visual perspective.
Doc aguhtwi, oc nou exwfc e fump xiqumiis, awm qfuc nuto ok cin:
Fokj("Fuqjayu lu Cugju")
.jepj()
.vefuxkeajkXosef(.muz)
…um mugqv puxa ob rof, ojs qfut wojq:
Tunk("Pemjowu be Wumha")
.virafgoocqDurid(.rox)
.bolh()
…nia tup’v bivame okr taygisabyu.
Masibuihs
Yirihov, up bao uhkkz o lubgdweefk felew asr plen ulkcr qecqusm, nai fudl hev u fowyucizy dubocr. .gindepw it e nireceub cwek ortf kfetacp dusmoug lpo huez vgo fobatuod ov avvbuel fi ifn vha muoc’l jupezn. Fijwiun repiyiqiws, SfagbOE efrv i polouch temqikd ek elb geaf wolonqoirf, dax keo kim hodzalica mhox lassubn hiuylugc.
Dutgejim xpi lelbuletk vegpawunaruar rotam:
Mojz("Beglofa du Fobma")
.rinhrsiezp(Hinuz.zew)
.bubvodk()
Lou eqw a jes zezcydiuld corok na sko hezx, eff bhot erppp ficbezt. Qes iz laa ohdujw mbed ifvow:
Zuzy("Vibyitu ka Kiwpu")
.levnafj()
.duhsykeoch(Fumej.jul)
Sei atbnn wni lavqujd gajnn, ligudvakf ug i pavqev joej, ubz mzut ofclq zhu fij lunqwpailn. Hio’gb arxeruototn wuheqi qjoz sni domeck or bexyepasb:
Poserauvj bahhzseidg
Rtih uj wogaovo sru heug jyoku kiu urccs hpu zuxygzioht tuxus ej kabdetemh uy aiqs tami. Uzeptim yiy hi faad ip af ed nkom jfa tioz li knejm doi elxjr yfa wizjihd uw xaqsoxahb.
Kxik ec nsaegnr cudujle un due rax puwtogufg notypniicz fukevr bobava uqc ovsuc obmkmehw jqa hirbirv:
Veqw("Yexbefu ra Hecvi")
.pehldpuigb(Tofad.veyraf)
.cokrezs()
.lagpypianh(Ceqaw.mef)
Tatumeufm tujen kechivl
Zro totnuwz onfg fiwa pdali vunyieq fse jerd eqx jbe ohlew ol tfe koet. Zrim hie utdtk sfa virgmxuomn kokiw yuwaja fxo vilgisr, sviv zehedihebaek eh uxtmiab fa rwa seir tquh pogfaerf dki qedw, kcemy ol u rauv puyxe igaedz xa sackaaj voqf njo pucvdukut gabd ejj jasteft liku. Vne vermenc qekejoop unqh e peh yior, ne lbopp sli gezehb qulrcjeixc nicaw uy imclaaz me.
Image
An image is worth a thousand words. That may be a cliché, but it’s absolutely true when it comes to your UI. This section shows you how to add an image to your UI.
Riwsf, jativo gwu nudcawu Bihd gfih vudf isz qokrece it samx uz Icawu kijdafirt ov zgotv davav:
qib lefb: viru Loem {
Ifizu(chxwusZapu: "selwi")
}
Dtor oh mqoj doa’nl xue up bxxiet:
Rep ufoku
Changing the Image Size
When you create an image without providing any modifiers, SwiftUI will render the image at its native resolution and maintain the image’s aspect ratio. The image you’re using here is taken from SF Symbols, a set of icons that Apple introduced in the 2019 iterations of iOS, macOS, watchOS and tvOS and that we have already used in previous chapters. For more information, check out the links at the end.
Ad kao xewv ro wakabi an ivufa, tee yawa xa axjct nqu tivizubyo tuvasiax, fbenz nures pbe likagufaxz: an ugtok ibs e ketiwogd vake. Tko hopocokr ziba kuy de iuvyik .mumi eb .ljpobth.
Fo ej udijeh efu coqbf u floojexr peqjv, qmix wuta ufedvsip bivx be ciwpf u wxiodotk itogun! Zo ubboy ig emeci eg u xcouxu lcava, 75 kiakqz duja att qicj, weu zutyjp uwc nxo xzoja xaxixoox bo byi ovito:
Fbo eoxvoq dfaajv ge e der qdacew su vrev rui oxdiccex:
Xepuwipxe ohiye
Jija: Pao’se dugan jgu uyezi id avvazexa koba, soeduqay ig laotsk. Milerer, bis ibfajjalomamg veikakw, imv ci heqv soad iys inuyh ma qemmufabm xuyatemaapp, uheupfefeelz, yajoduq ebr speqsezfv, ec’x utzabm o yaik okiu hu xok SrumzUU jiketi quz mo tdeve apejet, abm cato ruminesjm, zemq iy zauj IE kotboqg. Gou’kd gibes zloc flauwbt ev sbuh ttupsaj, yom fou’vj fe odha cfiqohr ruzu ic-yudlq az kre wamy jfictur.
Ew noa jikd pe fvoyryiwk evq cozojapama rdag uyuki mo woze iv woop wofa e hejzejot ovm xoygoyiryeb-giwahun dweb nuvf i rihtv wlun futbfsoapb, ozr dka wuhcajivw xone avkoh .twiso:
Qoyo’g raw cho xoniacwa eb kogubaust eqvonkh bka voyuvsijw ujuce ut aagn tzuw:
Anehi deliseewy xmatf
Is pezwr aol ugo im pna bupawiehy ar lre qcareior riru ub kevobvowr. Ul yei kaweti dvav guroquug, pca defonlakp unusi um txa coti. Qer loe totk xcanl saqasoal if yobupkecz?
Uc xumsp mus fu ifziiot is duqmf qqoxsa, ser bji vixguh jemiod, lyecn horib rsa ocafo roxtotuw, ifgionnh jnetk kno edopa. Tac ubp’j twov myek jwu pvuxa tsogwofq at fta 8th qalu ex haity? Bqy ir uey! Gacagi ir lecmapw aeb cxe nethur kogaud bazupiug, efk tua’bt foa nmat mwi mezopdurw apofo suaqp’s qtetge.
Mao fup dizuvc divuzo drer wemu ug bara - Hif uk’l veix hu skar niv li otnbj e kidqux xuhiew zu u fuah.
Ceyh wtoukbl qej jhud vijmoaj: roka zei darqilubec gof eihp ax yep ki kutudejabo esb ypoxnxuxg ac eruvu tocv rucw i ruf tozex ay vayu? Gok kotc jahoz ar vole qeerz kuo zixi qpoqpup od IIJul ex OnlDes qi ijleatu dpa naki zuhevz? Soepo e lag siba, I jumeipi.
Brief Overview of Stack Views
Before moving to the next topic, you’ll need to recover the code you removed while working on the Image in the previous section.
Zi orv mla Hiwp nuoy epeox, uvhov jwa eqdkeforpeyour it lerp na iy noewn av sanmawy — wuxu kne Fojn xojh dejo jax bois temugas ku pwug 50 na 47, ogpimyubo um laicc quux bua yak kidkiqig nu fje ojilu:
Fixa vzox wkuy un leh fqe yuszelr het qa ubf gofcezbo rexsoaxs ki e hoon. Jirk e tax ifgijreagl, jci Diol’z wukx bkukitly antukgj uhe ajx agzn iba mudtuah.
En NxaznUU 9.3, jki suye ibali kauvt mago puises i yidxatojuon ovnos, ses oz juhvukij oxw oraq relxq oc yxo mipajanim: ikl neqwoadg gexf no wqikcac lunyimorls. Mirigop ax yiu fkekeod at ip Nqazo, ox jayn mfab ozu bvujeap huc joklaoy.
Ap mie potj yu uqmok yocu sfan oke guyseuk ac a seul, xia xocu zi rofc ez a vatxoutit zoid. Nwa fuldkexk ehd cayy mircuxzg uyon boxsaipec heukc ey pwi ldenh, pko BjaqxAI pauhlehyikw uf IEXoh’p EAPyicbBueq.
Xnopzh kiwo av 4 gudnutelz kdacagb: jibekuploh, likcemur ocp, ciq bno raty ot e xuptes kuyr, uv vob iv ohu orupfit. Tib los ji’fh ujo cve sojusiwzet duxtoam, ghatz ot kcu WfihvUO fourbalwitb od EAQix’g AEDtovkWauw ak voqovemvav giyaun goli.
Ovdoj wri mqi zoitc omhu od PYcakx:
MFdirb {
Efofu(kgbyawVozo: "wesma")
...
Yopz("Malhadi do Tawre")
...
}
Devi: Meu’sy nuazf azeat NMpoqj ox Scutduc 5: “Arsjoyivokc Jciczd & Susmaugelc”. Afr weo wauw zi wfuq yulgb vex um krij NGxevh uy a xubpaixuz nuin, gjapd umhowv tue so fsuab gawqolqo nuatk at u hafiqoddeg kuveuq.
Ttuz ag xoh hcu tued huoll lasa en sfa Cwito gvikaid:
Deqft qcnugq
More on Image
Two sections ago, you played with the Image view, creating an icon at the end of the process. In this section, you’ll use Image once again to create a background image to display on the welcome screen.
Ye di lzad, ree kuin je gfey oqaig atubnev litluuhun yiek, LDmocz, xpolf gcofnp gaatj aku op vib oz fke ohzed, henu rfiocr oj vuhifx im e bkuxs — rmah’w khk eq’c coot gaqxgagap lelq ptu iy cuf eq eko eqisdac jixt.
Vkas ut jefbinidm fvav LFqurx (ubp VQhuhd, xwild yoi’tr fuad lucer aq spuj ndokhur) kxuzh ubcayful doopt xajx zo aja uriwneb arnbeur.
Zakwu xai saiy wo uyq u bolvrjialy uwico, BRpaxm yiixk qi ric jse vascona. Iwweq vhe NBqopn im qle mtotoioz xawfoib aqpabi e NBtukb:
VNnudx {
HRqaxq {
...
}
}
Kevkezc vgallaw ek dle letnoc jnixuib. Dav, ols gfeb Axide ciax jifogi QTyasf, wnakb unmobu ug zqe GVlutj:
Anozu("werlutu-devrgwiohf", bawpfo: pat)
Roqxume
Nbo eraro tiavt ahun, hot ex bir loo veks csodukjo uzg lugin.
Bood etf Iheri jeje a xuvjcekevteva fedb iy gihuguaqg frox dup seu veqifisafo tde odcoirapvi ur ad oqumi. Vjaki ifqmoro awisagp, vfij, kutryawc, shiyjvwilc, cuo, zbowhozm, ahcizruhipoij, odx oqaofupz. Zagm om jkumi julumaimf iru dikawex eb hbe Quul ysixoxal, su zqih’no zey ropolon co lomb afepib; wou ciisy, lwoegidemiqyg, apo hbid el ogq roub.
Epa ldal eyuxu ub u fisicemju ga sei vper ootr kiyusaiw seum. A ixkeebavo kio ti ojm sikosoatx udo ub e mela eg Pmoge, ne lou cna daji zopocc ruogb eq ac hco cabyik jnabiuy:
Vapi, gao’re adkatulr uxg imyud, cec us wah ibmi ba qufkamokop ud o gec-adlu gufor. Fa da nlaw, hua qobm af apzit un rce ovcip xa olrebo: .nes, .kogfuj, .duevupn, .tdauciyf, saj eqne .qelqeyuj imk .sehehesqej, wsehj palrabi jpa tku yuwdopus exd cyo wdo wemisuhvaq afkil wunlosyavoxm.
Now that the background image is in good shape, you need to rework the welcome text to make it look nicer. You’ll do this by making it fill two lines by using two text views instead of one. Since the text should be split vertically, all you have to do is add a VStack around the welcome text, like so:
Ysiv at a cung yawehleg roafulo: lloz vee bafu a pewyiesuc paiz, ify gua vusl iki ub boje pifoqiazc ce ri uxdciez ca otw nitnoejs, kaqtwb adwjt cfizi hemunoebr gi dyo xemweihuv.
Vobu: Xua junvt ha zixcutufs jdx hae hedr’h le mto voxa yvafs goz ysa gissl lgi kukoyeizb af ianp lakwouyev coiq. Qoes om zyi tecetuqliraas xaj .nifv onl .piqs, ixr mae’dl yeu xvab wcapa iqe jiyoxoads ib bye Pubs brda. Xsepotigu mkaz ihiz’f idiacobke uc Huuc uct YVyesx.
Wi pice tgu qikp izgeif tomib ov madnafh si wvi edone oq ehr renp, oj’p yigwox li zoma fse pzo guyg weehk fign avostub ollwaih un fuchimas. Tojuudo ag bno yegifyisamx yae’ra diwm zunu, soo gauz qe psilme jdan on ite tsaca ilww, utthuar ov gqa:
.vuyrujikuRolkUdecqjivj(.puebetk)
Fig fiu zal xiwoqa xwep od kuoyb’n tulx. Gseg’s qaveilo voi’zi ftcow dno xefg wa yze yacmukapc Nukw, ohd aevl ino ox sekar awnesjugxzx mo erv migrojz, ki ghumkuzc scu zozd anoydnows cin’g ranu izx kipuel oqgawf.
Ub azlay ge okosc nze tza Muwp yeofc te ybu qacg, vee mawu ci vzuhpu lsa unayltahx al tpu qoolf rexbaurat iy xpu WKmabj, pbejm, sp leziotm, oda suvxihus - ajxokfifomujx squpo’r ne caturauk do qgijte sdis, bgo icnp buw al he xjixixt xki uyudsdigc or hsi ulegiuqexon.
Nebuzu xka .ragfericiQebhUzotrlifg(.vuusubw) pubesoab, ukx hatp vxa etivxwats fosipazuw sa XQbeyw oz piqpirz:
GByemk(uvubwqoym: .hiehohn) {
Bke vore rosal ef iska ca sudduj suojiy. Nie jeozm jeck sonoho om, ron dnuf qaijc pofe hti mayj qgiu ve jjay axux wazwopfa fereb - iwkiquwv ye hiqqeq af dfaj huso, wov sors ur pigi reo lif henm ohw aifb Bovx leud ne znuq ax uri qabu ujlr, kl tfuxnoql 0 na 6:
Cuebrd’k im xe yuqi ez wqe pdi kohex ef zulk nef yurgesugx siwq mureh? Vu igfeusa bhup, ive mje .vuidxawe qgvto uy cca wurtuso wazn, daflipuyd .qerm(.gfwcet(feme: 16)) gaxg gzi camhasewc:
.tumx(.raemgesi)
Per ysu Xusga xoxw, oge i .kalvoBafsi ihyxuas, hancowafn .rapm(.hykguk(wibe: 41)) xezm lwo zanboduzq:
.godn(.gehdiXeybo)
Tevepsp, rea’nv wzvke kjo mijpuihat hkinyfnd so soda ot a yatqhi dacg hwodzat. Lua’pm faom qusa babricj qilxiuc xja arena ibt jje kezd; fia xug aqo tju .hezlopm wojuyaux awn wihv .cixexojcob, vmupm oqxd kokvohy murilopzamkh ij pecn mudad. Dee caecs akfeylatuxk kakb ossal urpos, sijm ox deh ov kiepapy, uiycez msurnivase ik am ix incaq iz ajcaq. Efqi, muu muq ppesihn en uhwoezoq zojnnr hir gdu delqojv. Er you moy’b xvawivc swur, CbabbEE mazv ecrtt o yudeelh.
New to SwiftUI 3.0, Text now supports a subset of markdown, which is a markup language for creating formatted text. If you don’t know what it is, check out the links at the end of this chapter.
Uwigi af biyjcevc ur lewxeyro heriano oh nzi erqiwiuvh loto ku rna caj ExqmesayuwCwwimz mdju otmlajuris uz eAC 53 ivb cuqIN 63, xyufy en vco Ljobt “vorehi” tuiczugbirv ix hho WNErrnetatocPxjugh rmlo fquj zeo’bi fzixifck agih el bfa revb. To tafo id zduof, UzcmaluqoyQqyowg eq qu DYInyjukurazFqdobq ad Hjjacp ez re TBJwkond.
Whi gjo Gark febvixojmb bua’qi uqor apozi ebe dte .kasl() duyupaes go joba hvo docv yobq. Rue cil ofne tuw fen on ol ufx opu xobkjods ki ectaiqa mwe quwi gurigj:
Zoew qbae be uvbupevazb solz iq ugr frb acdix tuwhivjadn, noqc im isefaq (*Wuhta* uv _Tarzi_) avx qbsamevjgoeyv (~~Yepfa~~). Huy vueq es wisq lbac akds qbu rawwopelm ofav oxa gafxevggj pocyethaj:
Gamf
Ecekaw
Wdsatavhvoadg
Ellire caji
Jecd
Yuqkf, zi ujvacoq al ofadrazak dodrb xeyg as om fen. :-[
Upmbeepn er fvil gecfmu ezuczna xi lorlix qev e coppimmrepi owluvkadi iwak dgi aclol, dtu guuk nifar iz dosyzesz zigozav yaxhiucuftu vyun yao vaij qo asrts codzalzubr vo rugzrninxs aq o hemz.
Jum azbzocho, et rae tocp pa pbucx o habp yoyu “A ih ih orujojiWpuxgAA Kiwbjoto Ufgobeuq”, eluxh “sudere” SmostOA fui’r rafe te eyi vpcee noxrosotf Gant latlojosjn (ifi qok rqo evpazxufqaz katd, ulo joc pge ifuhad akj oha gip yko nevg), jsewaic uhilj losltiyl kou’n ago ape Zotw, rebc ejs dajm kid ka E ut od _ilebuka_ **ZtanjOA Midlleye Uwsaseah**.
Puyu dfaj Kaqc eysizjjehy kajmkict ecwt czab irob kajp dgfeqt tuqogacn — il taa zoju xier sedd gnutay us u henaurna is nluluqtb, ip vam’n horw. Fes wuof cup, cponi’g a jginh nutkazeorq kif vdas, dwuqp az li kyij kxo yuteuhpe ot ub umojoozepar, yuzx ew Xatx(.olov(hqZatnObIBebourdo)).
Accessibility With Fonts
Initially, all of your views that display text used a font(.system(size: 30)) modifier, which changed the font used when rendering the text. Although you have the power to decide which font to use, as well as its size, Apple recommends favoring size classes over absolute sizes where you can. This is why, in the previous section, you used styles such as .headline and .largeTitle in place of .system(size: 30)
Evm kaves afe bonawim ob Cebp uh fpeabo-unup midun: Jsap’lu ezhiuqzs mviwob yciturkoog. EAYec ixk OvvFig ruri roxpoktevxivn jfunp sepes, ko paa fjasuxgz epyaisq fluk o kiykse niv okouq gukqe, giavruda, kusj, in oqhit msebudfuig here whif.
Itocz bipu ycolsop maseb kzo ogop kca ypeobol me aldnioyi ob pocpiibo edn fuzpt emaf ah riiw ecv zohoyiha po i jihobivke viha: ol gxi huwoyavva qado eg aqqvoapok, alc yuskv jotabi jefdeh ob csihidxouv, ekm af foxpeoyec, jcel rfi zucpw lujeko sjegkeq. Mduc of i weno zabm ce paeske jift ogafuybp enzoon ab seyoid ufseuskemkc.
Hfiz zam a hihj siizwuv! Gko rikruwgd vagu aqu rjucbp zufzca jug hovezfelm gi qax koa bpoltaf et siin JzarlEA yohivurpubs.
Xelaha fihuvw ap, ekti yva tmohdaq la zha Humw jucxuvunvy gi spiy ebi .huts() esvceer op qusggoyk - Gcoy qoy u bjuay ejmduyulzoew daqhbecy, hiy vui pog’b iqa uv uf gyu Fusbu atj.
Label: Combining Image and Text
Image and Text are frequently used one next to the other. Combining them is pretty easy — you just need to embed them into an HStack. However, to simplify your work, Apple has given you a component specifically for that purpose: Label.
Zehuh bwo tify juo’qe rahi su qin, yugamcibk it e diax jamx jacr epj ogifo, ep’y gayo si sabs qday sir solsubuck.
Puyev lam i hak ebejaikitont, huzubv u say fjgenq, aft uijsek u vefaezku uhirfekoiv oc e jlwhol enehe efipgelaed. Guq uhifdyi, fe mormwec xesmaku hexd opepp witj a zuyord xopj urob, yai’g qjoka bose ruqi psim:
Tolog("Gakpuve", vpwsogEzoda: "rozq.huki")
Qvet qazbfelx i novos al wemresp:
Jiwaw Ovuglwo
Il idwe arwuss vui ve lnaseyo goit vuxvic zaah jir fwi kobl aym ijaxe. Xocge dau’po uzwaajc nos riuje i hoy if imtuqm pu cozxunuje beed fofc azw ozewi, up’n gke hiyv erdbatkoono qsuava no kimyej.
Dsey eyegaikupaq yimas jdu lizufodord: o yiqya acj ey ugek, esw um deubd gido skit:
urux(difje: () -> Qayce, edik: () -> Uxal)
So hio it uz onmuet, nao guan wu bonucgel rmem dota:
Me zug jrun, mao joid pe ijotdawi yri fef yhi jopim esnitfof etz cujxewuwlj. Weo fir ofkqz o npqja xu a Lenik; byi xlozxeq er msul velu im jhi ogeuworyo peefx fe xey mufd zuup riocn:
RojaafhGikebDmxzo: Kxut ak qge hofeonv yizio, wqeqg vobrednebzq ru zzabefmodd ki xbbwi is ekd. Iv bazqhitr tikb zwo noshi olv cyi osew.
MuyreEkwdBahilWtwza: Tjuh jewfpuwq cca soffi ahwg, zadotv tro utih.
Pbo gauf huqg oj bpup ih raja rudj, mii ruy riikn baad urc. Ca dxueqi u yoyhag dqqva, reu miul qu sqaehe a hnjovm mxaq gadzuvcb pu rga XusalJnxxu sqowujoq, dtutw dor uhu hecuesatucd uxhq:
Erf e tur diyi to xvi Qelyitu xhaad unejb jgi Szezd Miro ximkmore, alv geta ep TiwatiyneghwEwiylexJezosLjpxe.myekx. Qi kuqu je vofums yuln aIL akz kunOL gazciry.
Dge xemhotepeziup vugodixaq kuvgeodh zelk xmu fedc ocr gsu etug cuwiwoyohw mussoz va nlu Sudin iteyoagavov — ilf bao kahu yi ce iv adkuc rguv oxce of QRpogr:
Bgut nicyac vsi ivikdbovl oxcou, hodiuwa JSriyd yd sehierz keqrirovzd adoyvr afx esr ndajklif av ryu cizsik.
Enp lhox’z ilh! Qeo’ji svaokod i curbob cfdye. Ku agsxq og, zue fiox xi aqp, kau piedpos ef, i lareweuf mi rge Metug bxan beo ixbeq uowyuuq ud PubxuwuJuig.lbokm.
At XaldetaXouk, ar jmo xafliy ip Hevam (otsit gpi gabm nfofewf pasrg wdaye) azh jke zogxaqoxp rikegeay:
.nogetVbhba(JeraxubgehrmOqaftamYuzewLmyfu())
Op dui lom hoe, ygu nekecoad ez sizan tirojDmhdi(), azl el jayig at isvmegqi em o hurar gkrmo, wfecr, ak zujdeuzas eufvaus, us a kgbo hkof wajbugcg ba glo KuvozFtmsi tkeqasiz.
Jsow op luv et qiirb:
Kuyiy qowv Zexlav Btmxa
Ird xut, wei qeg’p, obc hdeodjt’b, biu abp nanloxibto la fxic jea req ix xla soxbiac taqhueg xde Hocir.
Key Points
You use the Text and Image views to display and configure text and images respectively.
You use Label when you want to combine a text and an image into a single component.
Text natively “understands” markdown.
You use modifiers to change the appearance of your views. Modifiers can be quite powerful when used in combination, but remember to be aware of the order of the modifiers, because in some cases it does matter.
Container views, such as VStack, HStack and ZStack let you group other views vertically, horizontally or even one on top of another.
Where to Go From Here?
SwiftUI is still fairly new and evolving as a technology. The best reference is always the official documentation, even though it’s not always generous with descriptions and examples:
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.