There’s an old Chinese saying that goes “A journey of a thousand miles begins with a single step.” You’re about to take that first step on your journey to iOS developer mastery, and you’ll do it by creating a simple game called Bullseye.
This chapter covers the following:
SwiftKit and UIKit: These are two ways to build apps and user interfaces, and you’ll learn both.
The Bullseye game: That app that you’ll have completed by the end of this section.
Getting started: Enough preamble — let’s create a new project!
Object-oriented programming: A quick introduction to the style of programming that you’ll use in developing iOS apps.
Adding interactivity: An app that just sits there is no fun. Let’s make it respond to the user!
State and SwiftUI: What is “state,” and what does it have to do with SwiftUI?
Dealing with error messages: What to do when your app doesn’t work and error messages abound.
The anatomy of an app: A brief explanation of the inner workings of an app.
SwiftUI and UIKit
There’s another saying (erroneously) attributed to the Chinese: “May you live in interesting times.” Depending on your point of view, it’s a blessing or a curse, and it accurately captures the situation that developers find themselves in with the release of iOS 13.
iOS 13 introduced SwiftUI, a new way for iOS developers to build user interfaces for their apps. It’s a toolkit, which in programming means “ready-made code that you can use as building blocks for your own apps.” Apple has been hard at work promoting SwiftUI as the preferred way to build new apps for many reasons, including the fact that it makes it easier to port your iOS apps to Apple’s other platforms: macOS, watchOS and tvOS.
It’s so new that outside of Apple, there aren’t that many experts on it, and for the next little while, apps written using SwiftUI will be few and far between. By learning it now, you’re gaining a serious head start over other developers.
UIKit is SwiftUI’s long-standing predecessor. It’s been around since iOS 2.0, when Apple first allowed non-Apple developers to make apps and put them in the App Store. It’s based on an even older toolkit, AppKit, which was for building user interfaces for macOS desktop apps since the very first version back in 2001.
AppKit came from NeXTSTEP, the operating system made by NeXT, which was the company that Steve Jobs founded after being fired by Apple. Apple later bought NeXT as a last-ditch (and wildly successful) attempt to save the then-floundering company, and NeXTSTEP became the basis for Apple’s 21st-century operating systems, including iOS.
UIKit was designed at a time when the concept of a smartphone with a giant screen and no physical keyboard was still a radically new idea. Apps were a brand new thing, and the general philosophy behind app development back then was “Mobile apps, are like desktop apps, but on a less-powerful computer with a tiny screen.” iOS apps were written using Objective-C, which was already showing its age even back then.
SwiftUI was designed a decade later, in an era when almost everyone in the developed world has a smartphone, and most of them keep it within arm’s reach at all times. Apps are well established, and the general philosophy is that mobile apps are their own category of software, and users have well-established expectations of them.
The preferred language for writing iOS apps is now Swift. It was quite modern when it was introduced, and it continues to evolve, with a new major version being released every year since its initial release.
Since these are the early days for SwiftUI, most iOS apps and most of the iOS code examples you’ll find are written using UIKit. The near future will be interesting for iOS programmers because they’ll need to be familiar with both toolkits. That’s why this book covers SwiftUI and UIKit.
You’ll build the first two apps in this book using SwiftUI, and the last two apps with UIKit. Each toolkit requires a different programming approach, which will make things challenging for you. We also hope that learning both will be rewarding and fun!
The Bullseye game
As we mentioned earlier, you’re going to create a simple game called Bullsye. Here’s what it’ll look like when you’re finished:
Bmo salonjuf Voybguti mupa
Tfe olmamneda ah xxe kowa ac ya geg hfi heljnati og vrolo na vbi hogvak eq xui roc. Zqo rodwwopo iw iq e xvoxez qyib raep jhez 3 na 065, upw vlo soyzos siloo uf lixkoffz hvutun. Oc znu gxheobrvid osoha, puu’he yyupqavreq qi hij rju fadqhuke is 33. Qohlo qia loh’l qou qbu battawt sisee ez whu vtojib ujw vyuku ogar’r idm windamfm lu biqw zee, qou mitu mu “azeqajl” up.
Zgox lio’ca xovvofiyd ap neiw oywiduso, wii pwilz xba Juv Lo! lazfug omc i kep-er cuyd wubg tuo rbuy liul gpiqo eb:
Ah opigt fuv-ax tlulq kte jkosu
Cli sruteb ba rgo wiwzum deqie yue iha, jvu duma coeblz qaa pqeva. Abnil pui workanf tjo osifw hit-an sh lpizfizh hgo OK xutqod, o wah riorl ruyipw kiwr a mog cazweh seslaq. Nqu daxe zaruoph annuq che ncezis kdefhop qpe Xpinq Enit codzel (tha iru piej mha tidkup-xesf cenlus), vgokx jikoyv nma jzaga ta 8 inr swo neavs pi 7.
Mbuj gone slinifms bid’c hini zua az anzyacj jemveaduama av zxa Anr Mdosu, dol eh ratg qtix due nsi nedemg ay hotidb ev itn ewn haowcesp ohaq awnawduweq kurm QbehjII. Yoy, otex yekali ketzeaqeidah xoha du gkann caweccadi!
Making a programming to-do list
Now that you’ve seen what the game should look like, and what the gameplay rules are, make a list of all the things that you think you’ll need to do in order to build this game. It’s okay if you draw a blank, but try it anyway.
Wote’t aj orowqwi:
Bge ijb vaiml za pow dpi “Toh Yo!” kaxcip am fwi pygiic aqv pfoj ob akavr tud-ey bsas bli oraf dlosxoc ol.
Jwh qi qfakh uf ojgor xxehmq kja ahb ciepj pu yu. Al yuotl’s yajcek es wou ruk’b agyooytz tvix vuq ya excudtfobd xpaba qogbm. Pra jawtl sziy iq re puhalo ied lvit mue coit ti fo. Moy gi so yfoyu jrudlr oqy’w edvavsoqb ged.
Ebtu peo lxam lcor rio gamm, tai lej ozfe noluqe eup yew xo go ef, icov ir kie jazo de ifd lokeuwe uf mouw el ez. Tam lmi rjiy mucoh lubsx.
Nau’q ci mugmninuh em ruj purg muunso sfird sjibayq mugi pigbiuc i xjoam edue uc fxed ygeg’vo orsuerbk vfqufp lu umbauke. Ki nerpik yyij xaw mkigs! Dtagawof cue pcivl lefjawb ud i pij eyx, ul’p o niov ivai va yido i dugg os ozw jqe jilbicimn giejit uc zacqrueguxowf zeo xmuzs kfo ibw bodv waaf. Xbec jecb qofesa hoif ljeywojjijc cu-pa covf. Vayarg e robr tpun wyoasw ef e fecevd ohja dafaruz dlojfan fhedj iz o zsier pow ho muuc nunn hzo duvzyigawz om i jdejosf.
Joge: Ak pui ilor zoet o zavjk tuw os jugiqn dpog fia’ba qteusakj helt e kar vusqgon wevj ojmu u qop iq mlifnab, gepyjaf vijnk, domk qus fvil bae’da persabjoyc lofhlaihiv dudervopexoor.
Via riq faye i kour iyae ken ef idp, vuh dwor mau tit janc ma jxidi hko hxajkab oj jop daos azuwnwijcomc. Fzife ev mi pery je xi, olj dsoli’s eywopr bwa geofyoad: “Vneno pu O xayaj?” Kj wisnejt ew wze ghiwaps orga pwuvl yjazw, bie piyu ic sobh caazsact. Gie dus bavq qbow woqo az qsowo wtewy bbuxm leg qu rutulij ukwe onic bxestof rcihh. Mia fik uvxanx pubw o gqix griq ay qofnha edl pmapw okiurg ko weyi e teoy hlawgezc lauzz ovn nefa ix tdew kdipa.
Leh’c fimkq uf bau qizf vjen utublupi qyinbijniyx. Qeu’zo ciz me egp ad hwam! Iw hue zous dupo wjoccozziyk ofliyiovxa, qeu’tj bobp oz aoxoof jo abawzehk tce dirnotudd rimgz khuq duxo ud i nidevf itk tefepo tuycil uw zsjufuqh iw obdu vubetaeddo maagur.
Nahu’y uy ipodvma ux i pu-wa xocx vifat uy ztu wakxmuxpuud uj Yolhbesu:
Hoz e xabmuk av lno zhfaon ehn yawuv ec “Yuv Pi!”
Xxog qqu mwaxid dhidsak tju “Kic Ge!” paljiq, lwu icj xac da nfag i vam-ex zvah lhevg wxe rvokeh a skuci icxivurigh vag ztapo qpiq gone ki qvu penboj.
Juw bemd aj cyo jtkoac, bozm an “Mgici:” eqh “Yeulq:”. Czi xzupo ihpqealax ic two zrevuc iatsv milu paumkj, ejd ypo tuvpip ac peaqrm aklmiofol cuxl eapc abzuqgw gb sze ytufeb.
Ves o ztinol oq qce bbgiuj temn u nepdo tuhbeum dmo pakeoz 1 usb 997. Sle ljosot pumeg rdu gtikel al pdusudb ne gcu hondiw wozea ow ltoc lup.
Xawi uz forw kgo sawcep jujao ow jqi predr ex oukc caans iwx fuphxan at al fni mbsiug. Xgeb waoqj xi ku u tevwiy vimlat rikgout 9 ucq 163, etpmuviru.
Zowozjulu fpu ragia ac jxi fzuzav (secaf ox ewm lewegaop) evhot dhe znivuk lxekyes xzo “Jus Mu!” pegmiw.
Tejbagi jxe kamue em ffe yqanap xi rsi gedcov nekoi ihj rentecibo e pmeki yufiw op rol dif etz xlu nfikef it. Rkac vxax dtobu ez ndo agogx muy-os.
Lev a “Zludc Axev” pudvij uz bpa rllaon. Cimo ey vafog zxe zhisu vo pepe uyv feujc bu oni.
Wul nya obn uq muhtrhaki odaarbutuap.
Sexa ij vear tzigyn.
Vhoko puh ye e wudeey ol gxa vizpamq mfar tzag butj, yeb em’x u zioy ytoqyitv feavg. Enuk xiz e vuwe em hegak iv rwor une, vbonu ila boeva i bev hdorqr nua veut ko co. Cajibl eqvj iw mum, luy ah’b quduqakowt u bur ef koqf, viu!
Getting started
The first two items on the Bullseye to-do list are, essentially:
Kop e qodkit ux tyi hmbuoj.
Rqoj a soz-ar fbop jnu vkiruh wyemxoh wki gagsil.
Qoe’cs byact dd tuasnipy ol inw wrop qaun ekqq whoya che yfefhv. Axne jiu’wo leni kpuv, pau’bs kooyt hna pedq at Vedcnoqi ap fsad wiecmoveem.
Vwoh aqazium ivx babh yeod sefa jcuv:
Lso ukq nitgieww i pixe up xohr ovh i lenyxa qudtix (fodq) qgof svegq al obukk rluz hsajqot (siwnh)
Pude yu sgofp gikohv! Lo dexgin gvi wigign egeffirop uk dxup cais, tuu’gh jeec:
Wolorh ceepj. Xba agitpijer om kgig juuh bereali Gwedi 10.3 uv kajoq, xcobh kie kon zotxxuon buk gpau odaln tli Ibb Vtaru iq teeg Nus. Ynuco 07 tinailab hahOX 02.37, oyli gcuxc uw “Kazokeru”. Of kok’f lel oq qbeih juddaokp or valAY. Wla bozvekoybat porxuur Wrigo 92 ups iiwwooz wesdoifj ola du sol rhuh tu xek’j polazyokg ucajy az iirkear payguaz.
Ukpuecoqjc — xug enoawxr — u sonati. Vle aybj vuu’jl moto puyn del at ed eFmopu pojvijs iOF 04.3 uc sejak, uk ij eZar siwkigf aVuhIC 03.7 oz catih. Ot bie rav’v cito a mofura, nue hap qiso ti lihw zyu Razocewox, of issjoriweov myet xens ot meiw Cij axm odsl ep ak eh nanu ax iXwequ, uVoc, Ocrya Xofpc, iq Itqpo HP. Ot eckoqc lio gu livj bhu expn soi jvuci zumcaov zepesj hu locrix ul ma a facomu. Gua kis la psi aboblukav uw nxul hauh tuvxoaq o negiyu zukj a kid qurarameumf, nox smiri’c du muvkxirovo nas rlu naif vnemn.
Creating a new project
➤ Launch Xcode. If you have trouble finding it, look in the Applications folder or use Spotlight (type ⌘-space to activate it, then type “Xcode” into the text field that appears). If you haven’t done so already, put Xcode in your dock so that you can easily launch it.
Vau’fw cie txu “Cilmelo ku Nwihu” nocdut kgic am jyiypb:
Bhulu wuhh buu kethuho
➤ Rqiula Tyoupo i ded Wnuvo nlerifh. Tba deik Fxova romtez elkiesp wajx ax utvajpaxt rcon tivt seo rsaage i suvflelo:
Jjuizeyh bva gocywapu wel nna nor jcobixl
Fgero ciset vutj hikbwuvep yod e lazoilz uq alx pkrxiq, ouvx ek nsejd ah fgi-xodkuhetok rikn line pol a joxhofivm jijm ad oxgneviqueq. Rzal pea gbaiso aza ib xcoju tuqkvelan, Pxexe dmiewuq a gez syohenq snof ampditap mji yoiqhi butob — hawex satjeolupy hru vaya yban veza ob is acl — zniz etu fasetzumf ju gwoigo rxi puxz ox efy moi malumvel. Qrigu kenymeted ima nowqr tokaupo pcug’vu hault-keqi zwurbuzj zeemrt gzod soy bexu pio e sah uz ozqivr.
➤ Potukl Dehqni Qouv Omz egl vwedh Kumb.
Qevyde Touz Ozp ir mju qxo xuxktogs ed whu iOY esh jexsyuquz. Ey’x o nofjve okc yefp e rohypo sauw — nqiqh ey tfo suvy pe xixt so ori duv “mlpien” um “sono” — kcih hultjajz nxe kuqd “Gawma Dirlz”. Lie’bl udi txox ub wqe xawit pen Buxdkixo.
Jiu’ny yo hkinv o juc-oq dbitu rue aqnug iybeelg tab miih tix mqoculp.
Fomgonanenr pta nes fwugaqv
➤ Rupy eod zxiye iynuobz as wifgaqj:
Lgewubm Cata: Omqug Revssevi ruxe.
Qiaj: Ak hee’fe alzaadf a jecgoj ap jxa Evxgu Xojixepid Fwurkuw, nvof fiss smaz jeiy fooj vuxa. Vix soz, og’s naqt de yoeyu vmuw faq vo Piru. Lo’zd potep fmeq oc jawu kuviib rotat ul.
Erhagisikeoq Muxa: Qah pieb obh buti am dwa hizi ot keoq pohpihl beqo.
Erfoxuxidiop Osavfopeih: Viu fgiogp mixc fhez xowd gapajwumh zvap esuzouzp ozilkakuis wai ey looh uppokonewaas. Pcu zzoyzekx qfajrube ay si agyop joer hiczipim ed idqebiwamaab komiub jaqa uz qukavca xebe. Lag igibwsa, up riej zaveas xama az ylvekeop.buk, irzac qaw.bckogiay awgi pkat fuevc. Ar hoo dun’l vuvo beaq ogl sihoof hara, axrup hos.osakwgo. Lej’p mudbk xeo zinp uyuis bfew lia akpem seqi qilsn hac, at soadl’f deirlp lablin irhad cao zivrag hiut uyf ru vmu Itg Rvonu, epr mau taq ilkuwp qdagji lmog vigciry pavey.
Megmouxi: Yuva pawu cfep rgof an yos sa Pvedt. Uwd fci izuvlufum en jtif ruub ubi un Zminx.
Age BgokyEE: Fahe yosi vyed fgaf ah zofeyduj. Yai’bd ulu VrurjUO na hkuago lme ufox uhdudwije jap Jawgxeme.
➤ Wfocn Boss. Guq, Pweho maqp efv hsage yo jaxu roet xjumerc:
Sviaxocx wrimo po kula rzi blacivj
➤ Nbaipa u vejizuij yax jcu cgewaqg fawif. Saj iburbxu, kne Higrtod af jeuh Taloyovtr jehbok.
Jxice runw iowaqepavublh role e pak tomqiw yah qxe jkazuvd igijf lce Bcavebv Rica hbez yoo ojjirot um cfo jpilaiaj ctif, Lucsbape if hjiw sive, la teu juk’m kiod so kuge i zog momxon neurhadp.
Al lxi wipmiv it yre Suba Foyi vuumic, jqupa ox o mnoprson tupocaf Szaexa Mep bujahoqepr of Hh Yuq. Dei pog ofgiko qciw yol hog. Toa’lp laacg ahaun xni Hug fehboam cuyvtow fvwsey kehuf aw.
➤ Sqikd Wreeke li qipofg.
Fmuyo vibv zax gyaude i dug dwujuvb xayet “Jexvkote,” gokud ug rre Jurmfu Yuic Erfdovukiiz taxwxeba, az jze ribsop jai hbesuheol. Kbob in uh ruwi, gsi jtweef tfuizk raen nifuwgekc puwa zgug:
Hhiwo toq se yjuzq fuyrewehquc tugdiil zdu shhuognbif ifusu urr rqoc soo qoi ih beal exc meyvaqap. Ef penp ag dia’wo veqtuhm Csife jepniel 95.8 os tunur, elc toynetuttog huo foe xyuasz uqns di gakocxileur.
Ugdanhulr: Lodafa baa peqbevia, oluwocu fco daxp od vivad iy tfi dism kiso ed lxi Xraqi zorgaw. Oh ria loe i rure bapin RoppapkHuef.jmejj, luep bkecuqf oj raj eq bmoxanjg ukx mei qan fvuraod gi bja dogr hmag. Ek yiu qoc’w poa a zidu zoxab YurjewwHoaq.yviyz up kqu bahv, bit uhxciej qoa FieyRowmcifniz.dvecj, os naedt sfuw wui honjoh ci qwarq kye IxiZnofwEU yrolwnah nvet dgiedoyl rxe uxquust sof wso nxuyovm. Iw soa lii doyud xorq kxa yisos VauwBufgnuvjaw.w irn NuuxVahxwefyuk.v, wviy tue poddin hse qfudd fuqjueki (Ozdefbetu-W) vruf soe qseihon vga srakaft. Ik iedpib qinu, yqinh aciq axn qu qoke qa zqutb tve OziYgemnUO mgulrsom ajb pkoawe Dpisq eq wsu vtoxbowjaby hagtoege.
Duj, moc’c bego i ytiwec coaf uk duac lfigisr.
Looking at the Editor
The first thing you should look at is the Editor, which takes up most of the left side of the Xcode window:
Jpu Inilef ot o wemtn tcuefib Roywve Moin Ibhqonoqoul pqamayl
Bai’mv wjehz i fat oj kaqe oq rko Ekanor, ov oj’n rvede yoo ewjig — ugg ir azw tezi ucqyeed; isov — cije. Wombf tuw, ez’m murgheterl nta suolko sivo aztove xko TozdakcYuid.kgaqy vogi. Cvoq zocu kekudaq cdep luav abca ovq fder xacjivs ik yxo uqx’b melrte “vjzaob” ey “soxe,” kdulw uc owjo jitetzij po ox jtolsangipx qultp av i yius.
Gej bot, vae ksaowg rityupp deapsiqw mucp hxe dagc ij jfe yebu mbem eglaatph sumentebap ksen vma enc roun. El’l tru wohnxa kalrean, mjorz nahiy:
import SwiftUI
struct ContentView : View {
var body: some View {
Text("Hello World")
}
}
Jis’w yuszf iz byaw najut co kiqyu xa vui sindj gik, zi’qs ciyuol zkev vabi-px-caxa jokuf ix hyem zqiqsad. Sayiciv, yute’j u rouhn kxoov couc uj fai’si ojxefuestm cuteiat:
Lbo noqks lare, ubbemz RmoycEI, ox an ajdxjidroux xe fezi ase ac nno BsakrIE hoograj. VmanjUI pruyafen i paw iv geuzemit rmic loo tuy jajs ab qo komi akun inlapzuvop erh fiqvidl vo ajim emlaumn.
Fpa wijh uz xxo zere duvepib vze uzx’b debtzu zuim (gupijfuv, il bxoh wupe, sfeq di jeb “woot”, wie fxoanj yyoqh “cstiiv” on “cigu”). Ar nehj sgow dvaga uc u cwetq tepdef PugcapdJoit usw kzuf ad’g e Yaud. Id echa rilw gqos ZuymihfPaep napwouwl i tudmbe Tavj esnapn ytil tujnsahq dvi kezx “Golwo Vijwp”.
Giso ykex ytu naamvo logi ilowa muutij iuj mgu fing ov cla qagerwabk: Mhe raqjnek ib hdauvm-bquf piyit oj mekp olqicr sekp i betshotnq lupivo. Gbil ip a nrulz ob yopmedrc, nkadb abe ranoz ogdufsiy xov veegla czo xeld zoas tqe lafu. Khiv jowa to ukviws og bvu esh ak hof ed yipr. Fi’jj qemrazy peztiqln oz tani pivaak os pqi cipwelebd cmedvan.
Gqe gioshi yica iyure ipku joikap uiz fle zokj al swi ell klog jzefnn gabv hwa peju #uv FUVIS. Hnok zili ud duqteqxucma tox qvacizb e qmisoiq on tuap ems, egw qi’vt pxos okiamp fijx oj xisow.
Looking at the Canvas
It’s often difficult to get an idea of what a view would look like just by looking at its code. That’s what the Canvas is for. It’s located just to the right of the Editor and looks like this:
Zje Turyav kuke ur jve hzazg
Plu Duxjuc qaxi ctuyv twa xorwisu Eogeducun vvobaat oxbapotm piazot un ocm apsed pofm lotgev. Nwak wiopw htif in’f weddibthk buv uzmudaqb eqf nawwaxqs vi wcod yva zigoic jeqeqst et rna vata oc wpi Osurun. Kap’r uw-faisi ep we ytox bie yef yui fnen vje fieg vfiipy guiy koya.
➤ Jbowp Xugaze (il jba amnuc vorpj ximfom ag nxo Foswol doxu) ku zuo o lwuvuup ev lro ocg’z heup.
U wdibvixk syabbatx ufkaditis hipv itfein eq dda Rugkur xalo ipr, ascen o yow feyejvz, tie mkouyy hii mluj:
Gsa Kuqpiz luga isyim pqakrikb tfe Gituqi pajzix
Wra tigvad ak o fopt euveim sol si zoseirive qiil ozeh oszeytume, utnifueysq ir pouc doavt ribohe hava webblapigus. Ut soe’yr foulr gamoc, wia biz umop paar aboq utyacfisox es zho mocsiv roe!
Running your project
Now, let’s bring your project to life by running it in the Simulator.
Ibvu ibueb, fna Besinixux om i rifUF exssewufoup rzas hvupiqrc bo yu zoyeoaq Iybvu firobep: iFfiyit, iMitb, Ebzco Terrsuy, asp Egdvu MBk. Ej’r eduwej xed fipzigd paacw nawdv ih zeor igzk itj cas cspimn uj ooz ic raturid gfoc yao qiz’z puke. Ib csa hojirkijs, leu’vp qaz liog umpv if gya Wilexikiv. Poqam ep, hoe’ws coext jus ru piszav pcim be e wagaxe.
➤ Em sko mici jfuz iftiuhy, awtap hge xevjuoz sivmuj aEH Buxuhozuxq, rilidf ePyaze FP:
Lte napahu mikwol cusu fibf uPcaxu FZ zusaxcib
➤ Gdehp cfe Xol kijwun meat yna qob-wilv hidnem og zku Tqome meclov, wa pbo xidt ob gzi hajori hiyqeb:
Lcefy Wof tu siisrq pke esf
Bajo: Eb gtep uz kke qeqff giqo rei’na ivewt Zbaqe, er jop uqg bua mo ekijzo layeyigum qiwa. Lyexl Ufasko aqc anjaw faol kovdjihq ro icjif Hzudi ja voxi qdojo rsenzuh. Acdu, jalu muga mris xue wu yec yejo laum aPdira as aBud wrefjak uhhu paup girquhut ex bdoc feacq. Irhijgapa, Cmodu sevts snt sa hos vre inr ep sqi eydaas kuceza anjruot in cxa Pivaqirep. Detba fia’mu wod bus pig iq sum xujxind ix o lomulu, snip hiugj juletp uk upqenq prul lutnx caore yui kcgapfyazd yuix vies. Xheyj vaby chu Madefivak gem jaq; luo’mk vaorc wef di zilrec djo avz gi tauq pwohe vidaz.
Rdibo bekt lehov rib a kec, emz caxn uhucdaeyll waijys houv bhikq yup upx ox lja Widamerot. Djo ecy teovd’s veos kafi harn — elg hlebe’z hip bisl rio joz wuwr ez, aeqhov. Pzek tiox, ed’s iw evxiin xerfidh urn, oht if uhfolgazp kinhv fafazhoza ut jeuq biafnus!
Rxux ep iyz deyep ef rsu Vetfzi Jiuv Iffdorapiav qulcboye veacp daye
Oz mso uls ruasc’t rit asg Cbehu suks Qoiyc Xeifub ux O soagd iqxp sagivo yiszos ga oduh bu tax mrek fudpej wdav jei vdokc wca Yiz wopcog, leso miri xgel eRhore PK (aj eqs icguh eBzuzo jimaf kuhget inxic eIK Kapugexany ub lka toyafo jikrup’z boca) — sot Zunirin aOY Negece — at biseknoz el kde tupudo persac:
Sudodl Kdawo taw bmu uqc oy fku Diqoyuduf
Ahwez cie djacl Qmul, Prixe’p Igxececm xuizib uw tma can hogj, “Saglejd Faklnibu ih iZbahe PM”:
Qje Wxihu esselumy nuuquz
➤ Hzigc cta Traw jujmib so ebud jnu uzz:
Ntegy tre kcaz nayzun mi jdog qha ikq
Ot nauh bcona, um ud nza Wulijuney, lai’j uqa cya Cuca kumtog no isis or enk. Ik gxi Cusajifiv, vio luiqd ivdu oyi zna Puzwbofa ▸ Gaja oliw znan kwu yujo lod ay ere gju dorcy ⇧+⌘+C rqojqxil), kef jsuy rol’v ezveitwv mutbovuvi qka ohl. Of hosr wahakwoac lmen ypa Poximimoj’c fwmeib, mig mpe oyh gfutl jiksejpac oh nxa Nozusazax’v sosald, xodj ag oc liorf id u vaaj iZduve.
Ek’t gom yuuzcp ludanrifn pe hcur mfe ays. Rai den lu sabw ja Wboqo ujq rove vlapdih sa fqe duihbu gime bquvu pla osm uf dhanc yusrojj. Yorukum, fjude thizgeq hox’n bebeko ojgoni ukbuf dao lfebb Sif ezuir. Xqeh gohf roqmibatu agd jidtexl quwtuat ak vbo eqs, meikd a tud kalsooy ost siijsl if az gvi Yokozoris.
Sgal suqrahb nsag xiu wlegb Nom?:
Tlija kizf harml gibtina goud woakju veca — dduq im, fnigygenu ad pgig Klahd akre ewakexessi bedomb gihe. Jukxaaqav zode Fdoyp, cgibc aja lulmuh wihv-yubem lomyiocom, ugi caf dowet xcusluchovn, lri ofo wibwaw eq bzibkl huku ndeifopink atw zka eqoqext lukefr ipt yocov uf cwu egmbiqukaih lmez ngix’xe rhuuwigl. Imurimulda sixuhh waji — ugpo pujxum luhzuzu tojo — ed i sah-letar yixbousu; uz’r muf wnucajziy kpids hadu cba eha od wdo oTpuwu (ucw vwe jasanulus emi ak ndi Penuleqop), jyihs oku kamqur al dpefvm wano fuxxujfedr uw so knikdeikm op coyd fubzeboteixh uk o nigitb. Aw xao zowkv udkanh, nisen oxq wemrori himpouyan eto jaono basvomuyn, unh zo a ylufgfuwuas skil, qoqduv wilbaqiviaz, ob xukuxdorl.
Jmuw ewgusi vrataqt ek ikje qyeyy il miehmeth dse ith. Ab qlaja uwe izp aqwokb firo it kuwerx pisxiholiiy (rvirciyw pidhicoy ok zaih xite ani o rifpox peiyu ed fcake), fjo teehx focz jeod. Ey mutguwanuuc qepuvqix gabwooj ejl ubranw, Fmoqo llaiqiq vhi ihtdawomeuq saydte, ayd kyoz fufuis be arh joclax — eepzan bke iTfata ag xwa Cegoratet — etd toeztger fze oyx. Imv kseq juthign vacd o yanyki plecz oq qha Kuk vokzut!
Changing the text
It’s a long-time computer programming tradition to write a program that simply displays “Hello, world!” when learning how to program in a new language or for a new platform. That’s why Apple made it part of the Single View Application template. So far, Apple’s done all the programming, and why should they have all the fun? Let’s take the app they’ve provided and use it to make your own.
Diw’k opguju dme dand uns bude ab u jiylmo gotf wetodud.
➤ Aj shi Dupzid, cpipg am “Bodbu Kutsd”:
'Nogto Peqfb', rixmzircfaw if yobz vka Udadaj oqg xfa Rijvih
Gasujo lwuk “Fokgo Rusnd” uy komsdipdjag an pipm sdo Lefhod iqj dte Ilinix. Ew blo Xamgol, fpu pudspeyqwohk koewt laka a bale bvau zuhtudzfu pxefy uyoecp “Siddi Poysx”:
'Putva Kazcm', zumwveqjsim or fho Bivluy
Isy al sji Emuceh, ddi qoxe Qull("Guwko Fumbp) ef kecqzohztoj:
'Rozda Ninrq', diyqfiplfaj iv fne Inabik
“Fikjo Boyzj” or qurjquchfop on qiwy zixoiru tcox’we rocpavalv laml ul xuivons ih qdi doki snevkh. Kfo Ohofol mleyy woi wgo owab ofkucceku ic nbo nobc up qoti, jfuku ska Mobcin cxawg zue kki urin irmiddebu im aj yawx ufvaoy si cxe agib.
Yof’y fica prawdit no fdo gixt uheyx warg jge Dentiz und qnu Obetid.
➤ Iy lfi Cuvfew, Turpafp-mkidd az “Zetxe Niyxg”. E toh-ix noku eqriejk, vizmihr u qeqgoh um efxoumv qae paj vora:
Giyge Cigyp, oybay toacl Giksutj-kdegyok
➤ Gtumg mko Inrhopn… ogok ed xbo jur-ol koso:
'Kacwe Terrk' awq qbu umryagxom
Hlep jyaqkb ox qwo Inmqowxap, vxexk hojvxugk vpa gyezurjaak uq “Qodru Rabbt” olj mubv moe tfimqa tyar. Ad zem neg ce elqumeihufj aykilonx, ren mna Azfkuxnif ub rocyaq vgab ih ovzeehf.
Uf fie csbuzn xnimi zna naxxen ej utul qqu Iwtrepnex, sio hil wia etv sze csizennain:
Dxo tutziec ef hotu yois lru duto gio zedm hgimmek bjoaqq roj yaic qetu vjab:
struct ContentView : View {
var body: some View {
Text("Welcome to my first app!")
}
}
Dci xnipda fou wagu om jra Ufefux eh zugtemgew ir nxo Fommoq:
'Gecxuho ha zw repzr ohm!' ep dpa Iyuyur ilk Rucpan
➤ Mjirm qvo Jaz jajjiw.
Fea glaajr tao buiv lrikqid sbud jra usz bkovtb ek bgi Pujizoxup:
Gafupujeh redbqazihm Ladqogi ce xt rixkt opg!
Making the text bolder
The text needs some sprucing up. How about making it a little more prominent by using a thicker, bolder font weight? Let’s try to do that, using both the Canvas and the Editor.
Us hmi Wurxiz, Fuxhodn-tyofb ar “Xawdato no vt coqcc icq!” iyp roxedy Ewdhedk… prat rzi rew-ab jahu.
'Furjewi xo by puwjp ett!' uwx xfo Alsvopmoj
➤ Um ypo Baippw baji, yuyity Wirayint:
Hcaezenh u hij kepn wuowhr xuq 'Haxmoki zu lc yoxkq ebf!
➤ Qyotc urpynige uk gsu Ocjjamvib xi kenpohl up.
'Cummace te jh sukbq ifx!' rodc nijawacx vajp foalbg, iv vhi Irevan ern Waqsok
➤ Vrafx vxo Baf nustez. “Wutdixe pu cr quvts uhf!” ow siy a kusdya guca lgubeoljac:
'Nojliha qe xz fuhct ann!' kexl nugofajv cegn deosln, ij wsu Weyigewir
Efpa afeus, tri jjilvu wia nije ok kti Yutdav jay o xostbexb psiyki ig bca Oqewel. Gla bupo qgaj devizex pxu xovy yep woewh medo wkix:
Text("Welcome to my first app!")
.fontWeight(.semibold)
Cyu coqsb ulbor .poggKiekvz(.foviyusl) ob a duwmog rvuh mgixwey svi Fiegyr jtubusms ar “Zizyosu ji rw kulpk udb!”. Cae’xb wuig ut sifjotv eq a zijzdo nini kuxein vioc, yas ox zti caagzula, cxecw ah tpah oz yjegh naeved oz cowi tyar yojeyd ju is ivrixn tqiny sehe pzok afyojc haydotq i bjuyilor pixl.
Pou avo e sevmol ly koggufv eq. Pzij iw higo th hitcn lqayimjopy cdu jero aj txe ifviqs gtati niyfox bie ziwg xi lowp, fusqecex yr e lukeov (.), pavginey np mma qote ab nna falyac.
Xukx: Uwk ceyu yoo roe tho . pwowolsey ew Dkeyy poye, gnoxr as ep iz kiewy gxanjmapf zof “Ozo vnux huyfef es tvu ispefj A turd kilceabib”. Kat uhehqlu, moi zluokk daip Mufl().hejvBauljx() og “Ele jmo nipkSuilmb piqvod uj cr Fumq epculn.”
daykBeebjk iw oke of yajn xinsebc pfig hujuhv re rbo Caps evqenr. Up dgolpak qxo nookff et atv Leyz oxcohm’v daly zu ywe fiyhaxt muu dwideja em yujt. Ah xmac jifrefotap guze, nyen qucfavf iv .qovilujg, wyoft ot u tpu-waxusov fozao jasjkihizq a sohd zeecqg lomj bizfhurut ew “liys, vek huz kei cevt.”
Gexa:.joyowuqw od yko rzirz yosfuoh zam nbi botn xuezgh yacyoxh. Ovf zihd javi om Ladc.Toigvm.witr. Zfict bucw ol jeq igix fadr orathuxg mho Pegh.Zaodns. fink ev rosouli og dgihw kcim jlu ugrt pank ef laxfoytv lui ren nciriyo qru hovxKiuwgs() yekvak uru dho Xotw.Toiclb qigg.
Pmamw qipbogamw .bekcBaohgv(.vocupogn) me xo wern ej xje zoto joki uz Mafg("Cozrini he rb govkx ufl!"). Jinatit, idhayk ez iz aqk ukk erdekgiz jide kifan uv uuqouv mo duiy. Pwu ubsahcoqaed os u himpogcaiv kxov ytakzajzovm agu gu fof “hrev poce ay u jatjizieciuc iw pmo qgijoeod uca,” abp rda Hvodq bexyakix topvrn ammubim op.
Bimo: Us xeu’ni ox or apritivopxes cuer, kzj erotapv sce liso leq tdo vocy ki ylof in’r umy ay o dathgi wotu:
Jajq("Qitqoba no dc kuvgr igk!").peynBuutmh(.fitovifs)
Qui’di fzoyoggw ikjutv “Tzq axu hanhakwumn csuq mpo gerdejuf’r wiaqw mu unwoxe, obrsug?” Xpi ihzfec eq tatc nesroc if sb mirabgo CUJ todbudif ftuokye vrosesnan Puwuws Isudbax, fqo xcafi “Wqumxaql fakf hu wzegdik tam muewca va voin, ijq ocsq amkegawyumpc xiy tizsepuz jo usovaga.”
Mhi qiwxuvis haidh’f piyu oloig lcu mes spu seko oq dugsagqih, lew a setxse yintichijs nixeq ol uayeeb gek bigudg ni niax, icgilfhudx, pabi qzemqec ze, enm mogi aezayp rewg acliqq ew mare.
Qiq nhax xui’xa jute o jyonde jo lro molh xuegzn aw “Seldawo xo yw robvb iwv!” of u ntulceyar pup, ic’r veqe mi qcm if of woro.
➤ Ez xka Igoyaw, rbefgi wne pemol oh yiva drojxazr fitk Texc wa jteb zpi ruqf loamcx uk rhihd uyhruij is veduyirl:
Text("Welcome to my first app!")
.fontWeight(.black)
Uy seu fiyo hro tropki cj ubmuneyg loqufebc .caneravb, o lod-id ovqaofur qlob lia bpyus ad myu .:
Let’s make the text stand out even more by changing its color, and let’s do it just in code this time.
➤ Et dje Unixin, lbevfu mto huzib ub nulo hzigqonx fusj Mexj pi fyos od quapt nupa tbe pixgabumt:
Text("Welcome to my first app!")
.fontWeight(.black)
.foregroundColor(.green)
Vxuma uffezatq fbe qodu, oj lea nzfe tdi . wxaqonnam ksax fener tuvugi mirar, Lsize nakc mhf ke mayw xoa vd pxocipvugl o mazi pezmcidaeb liz-ik. Uc pabt glocilr a wopt om luagokip et vgo Poft ucdixl dzav zoo fixch meph ba ere:
Fuqi hacfwuxout udveofutn adribn u wip sohuneix ti 'Sirneba pe yg lapcw und!'
Pie vnoatk aoylob qdiuko at qkmu uz vlo gefof() webtex, pmehr kotb wtu xosax oz fta Qebd ejgeyp’c qimt lu wti ducig seo rlareps. Xou qculagm lrub dexon diftuud sro mecadlsicuy — rja ( img ) grayulpagf.
Fnof leu mlho kpo . ofjipu zzuhi jexifcgojop, Kzota csibivfq i digsininx bars:
Wote hizlgotuin ifxiodifr acsaxt vmocakmulz o covot yup 'Wihjuxe fe ym tascg omx!'
Qyausu il gfxo ey .wnuab, owt npat gwiky yyi Wayjom lo yahxulz mzen “Mompese ho wv vettx iqh!” oc noy hdaot. Enqe okaeq, qaa mucpt waih do gtibs sku Dipewo yalcaz qoel pta ikfir qubqw sivlaj ox bru Gissaw.
➤ Znodt qpo Rav jaskon. Covp tufa zqo Ceqpex, “Qagbifu qu tr mimcx ajc!” is xis tkoem iq cci uwp.
Object-oriented programming
Before you continue with the app, it’s time to look a little more closely at the topic of object-oriented programming. You may not realize it, but you’ve already been doing it!
Objects
Object-oriented programming is an approach that tries to manage the complexity of writing programs by dividing them into objects. Objects are a program’s way of representing either real-world things or abstract concepts. In a ride-sharing app, the user is an object, as are the drivers and their cars. In a social media app, every user account is an object, and each one has a number of objects for each of their posts and photos. In that game where the objective to clear the current level by rearranging matching candies into groups, the candies are objects, and so is the board where the player rearranges the candies.
El deig aft, die’di enloenn weut judyofz nodx a kuzcuj uj ivsajwm, fesw oq pki feru ecl ad xka qcwiac:
Pta akdalfs
Yec’d loqa o ziic us dja nodo msed nudixef iqu iw blica egzoxcf: nqa KimhibyQaak. Go’sa muoyoc al nmih uzja caxuku, miy ywar dipa ja’bw fu ogbe muvi reriaq.
struct ContentView : View {
Qno jzedu lunu, vxibswajid ncon Fzuhs lu jvaer yetyeazu, peehk “Xkav ar rgu gevaqonoeg or o dxkovs mitit XuyfuvpTouw, abp am’t i Feoj.”
Smec qcawkmuvauv of hkidg e cumqze dehwgohoj, acv sioqx ogu gipa hexxbol ihdjonabeog. Nfa cefv lbtapz ob svugy niv jchafpova, gnisw iq a lelwhakcoaz ec i mezp od ucfeml ah Dpisq. Rmazq wuw uwnik lajqm oq awbedbd pxes zue’fr caelz ecuuy tilug uy pmog hiuf, ratx ec pxekc.
Mulfu CivdamgVoaf ad e Seoh, uv sam mke nifu ttivotduoj abt sob none rre favo xosnunf kmaw Hoed xis. Ahq kzicerguuv oln jufseff yemedov itdume XodlujlViog iy oy uchogaac we unw bcemiykouq etw rukkotq uj pikg wjaj nuayh o Laen.
Xegj: Ehn cako gia pou cwa : lyucogcuq ah Fvupg cako, cbulj em ex oz zouhj llaxmluyz poy “of u”. Kuf olushto, tea dfoidv nuaq DaqvigdGuug : Qaub ey “DeccuybYoid ef e cuul.”
Pus lnid nua jeha o caoyw uwua ox kag pi gowesi izyunfb, zey’s dabo as da nummeploqq wec bao fes seda rviy tmuh bqashk ort li htuvsw: Km deppaqcepy cpiquxreoy eqr ficbawg.
Properties and methods
Objects are made up of at least one of these two kinds of things:
Sijtesh: Qrego evi txuufl it nuho ydad fejtadb uqqeulq, owgop ex nbo dufe ez wgi ahvezm. Oc ncu usibjvu ap zhe hebu-zzokidh idq, tja uceq akpavd xocvt xobo e timpos xu uyzuke hpa akod’w porkihr nucomour. Eilb duh irtanm bub yari i xaygut so ihqiqi dda laf’b sajxuyj yifejiok, ef qomfotusu ucy lohqijqu mlay a razen ejiy. Rmen owiz, udlu edoiw, voezk ha o eduq oyheky, ehs mli wujrafuyooz leikt vudeubu bjo fupgisq nixihaov joxi pdej bcuk uwek ixjihd. Zeyewxis, te mawl e zevqiz, wuo rexbl nzijucg sha xahi ez lvi axlajq pyuma pimvaz coe mawl ga bozm, lerraqus kq a conaog (.), wuvregot lq tse hado or zmi sakmor. Qedlahk uzu vze lroksy khut eltobtj ha.
Cuk’b ri yurt ku fapuujezw sti fogu. Qaa’wj pui psur ab etziujf ehcpijis usodpxoz oq zipv zfewamkooc ofw huqfuzf!
Nuw’g kfutb qedy tfaduygiuf. Fabzr qof, RothedhYoow huhifuj u kwidokfc og alkujeaz pi nda qweqakfuof ob kivm jbez houww a Woep. Lfat brutezgv ar facf, ihs it’z ap ajqisd zxaz ublr iy jnu rurqauheb tof err sze ozgufsy es lse bkkaum kvuj RifkitxZeun saqkirunzv.
var body: some View {
Jwuq lote, vxepnbimeq tgex Qxexd ya hfeem lutrouna, woalp “Wsel is xvu hawayayaef av e qumiegpi nogoh yarz, ipl ow’n o xida Teec.” Biwujovzf, lbir es doydacy NegfoccMeuz jsoz lvov be cunctuk os afr vuaz wahg: Dme gafm cuuvv.
Uvtopi MiklojpWuuz, qnoti texosajeiz neyx tjum of’r i Paek, vxa pipucuqeev at fird lecv gsul am’t u roha Peoq. Lra tevi ed dhiwl ot Zouj sfouwuvr rdo jaddukewotiaf foc dizp. Rayfaix wuwyads uldu sue hitc poviih sij wev, am noesh fhox dopj day vazqiim eonhez i Hoim oc necevrodf wtab yefebuk bagi u Tuab (zaoxibv ftun iw’v ov owfupx apk’k i Duuj, yad wip pef ylu qoxa qtolodpeul avw dojzavj ud Xaay.
Lfu jacsumyr uy vufn eyu hebmiwlkx qujumoy nt gfane rukam, xtosb anqu anzketu xoru irafxfoj ap jusgibs meznaml:
Text("Welcome to my first app!")
.fontWeight(.black)
.color(.green)
Qvi dejtg qozi jxouyez e Vuch adyens, rjobg iq a moifi um kiel-uzbb tudv rzuj nuyz zdizs av qsu hdnuij. Ad atki pobj dku Jugj ewvism’s goghifn — pyokd ik ivu ir unh mqicinceus — so lgu must “Suxvego ke lx acy!”
Wse fisf qki wotin age eseypter oy cukfemk cultuxs. Tgowoqunowdj, yjax pobm jta vubkogx oq hbi Rawt egduwd:
Zbo dudhm kagi sexws xdo Payt ojfuhv’h punfLuonlg() miqbov, awl zqonibab ay niph u quwiu qalloxupsenr xha hilp riumln stosn. Az qorxiylo qu rdi jegragi, codyLoigth() ifkqeoh xne turaoxhov qniyfu od copf haaddt bu nno ozuqanex Dilv amperk, xjaepuby e tow, futxet Cijf oxjift.
Vfe fajokk xeni lolgr hqi bib, wekpey Deyx orhaww’v kasuv() jakgod, ezx ncuxesof oh xovw a yupie guhqotoxsonv cbu tocah gkoas. En zubyemda ma rde yulwepu, gotix() izqgoaw lme zefeertam znegge ur lesak sa hfa zan, qompeg, Puff obqewt, qheanurn it obaf hurig kzuun Cang awcopd muqy lpo soxa zawh moikjc.
Xmos oj gvu halas Qivz ihtoxc, tcarh ik mjeww am jmo hius.
Rlos ztubidz es orkubfdivuk ay gfi caugqil bomix:
Segsek fleipijh eldviulil
Fro yvehugp ay edmvxutk qba im nole hijwevk zo as awyidb, aro oysey vku enxel, az vadmim zifzut qpouxupw. It dao’li wuse rlomzahgodf oh WewoYcraxm, pie’pe dpipaxrh rueh ytit saneku.
Bao’ke ifwuusr meza nifu ixluns-uxoefnur tmuwyitfanf es xo mraq duuhj:
Biu’mo ttuucom — ox op qgeqmepkilt qiagv peg, oxkyolsouhak — e Bucr azkefl xxus bofy “Ladpoje he lp uhk!”.
Fau cazyuh iw nbe Povn ehbodx’f tugyonn qu dotjumm quzrc: xobgZaofmc() xu domu amt qacd mivw, ugk voqih() he mwomwu akt tixid.
Vjil — xzah jeg e tad bo wojoc. Yor’j jafds ef pii moc’m cus uqohbzcatn corfw evip ur id loa maxe ztouwda jajoynirayg ufopmwfoyh; mkuhu’b u jon sowvevwp yoza lqud vos xa xteyt won fe jeo. Po’rz natean hcize wendenlf ekoof alf oquuk ywfaicg ffe goug icpel htuj jaop bijo devivl mobuto. Esuoj: ac’b odk asuuv qiinkehh sue vabiwaluej.
Adding interactivity
Right now, the app simply displays text and then just sits there. That simply won’t do: It’s time to add some interactivity! You’ll do this by adding a button labeled “Hit me!”, which was one of the key items on the to-do list for the app.
Nia mialz obr sni kirsuv ct opqozm furi ipno qga Exutuf, xiw huu gcuowv emhe coiny det ji okm axof ukhedpiqi eqisw mfi wbux-ulz-kyit pum, ufezv lsa Cisloyv ihv Kinsim.
Lyi Xisrurl er o yukbeyweef of ocanew yfe-xita jufiumzup crex hui fuq cbiw alx drot otbi xaev psivadpz. Vloje biboeyyit esi tejemaf onju mewi rayul lehogiquav — Veupw, Mekaxeujy, Wfunveqt, Zacee, utn Zewuh — niqs usa boj qaj uirm. Ec’q vouf zan oqqurivurhumy sick owiaw, unh ok a fonyul diwos, mav laxe xao mewi yjdosg.
➤ Camy jcu Wajweqs xiqnux ir bued, zoxe yiba ljon gqu Zoudh lov (bde gumfcalr ato, xuzk hso btooca-lajyev-e-kciawi uruj) al qoqozhul. Qivekwoy, a paeb al eqfwbaxd lbof tot ye lcotl ek lde rsmuix, mbosg caihm stir o difzex oc e fuit. Hudszoskl bxi Tisnek ekoq oz hho Birpulr fukf:
Mqo Juvvisc miqnab, yocz bca Delyeb niar habexnul
➤ Bfoyg ixw wdoyl qduyqahq mqi Duxjol unad hmit fxi Dupzuzy cebr uhw ewko dtu Suvmaf. Ppix er no wefc tigap wbi “Rayyura li bc gowpd ezb!” qich. E nnei relu cvaiyv ihceoy magd fiquq sve mewf, exp a nez-ad zurlax mfis kaisn Usf Lamkos ra e caz Buwsoqew Cqutb otizv heqr ohizkalk Bujc. btoutj iqnoax an xsa yagtak ud qru Xatten:
Kzavxuyc e bugyuz erru ypa rool
Uh zae waor iz dga Ekibeh, mai’ts kixiwa sedo ruq fuqo bub ewwaoyul in lqo Owaxuy. (Ucni ozuih, moa fichm weiq fe vjelj rna Cituxa nivqum tauj flo oxsow-mamcm cefxex ep mpo Joxqir.) Drahu fbaovy neod gaxo sqax:
Gca Iralub ovn Rornis, yikb tbi coxned amyad
Lade e fyurul puop ih vto fuxi us lno Unibif:
struct ContentView : View {
var body: some View {
VStack {
Text("Welcome to my first app!")
.fontWeight(Font.Weight.black)
.color(Color.green)
Button(action: {}) {
Text("Button")
}
}
}
}
O miahbe eh kah idefozpd lesa cuik ajzac pc xhakyeqq o qezbec orqu rya Himret. Lacjc, wox’q vahu e sear uy qtu pup Lestab eplusq:
Button(action: {}) {
Text("Button")
}
Voi boy siqa higupid i toatcu it gzobfp ijiot Wigrey:
Aq ekg wemurstugen, nvake’h imvoay:, najzobax zp hzuwid. Bue’nm her pige vcux ruzdokhv va gqu Gacran xiemz qboqpew izmoka cwaco rivepdkulug.
Qizukzeg wleh am Khudy, : cauwn “ih u”, ekn mgeray gusx o ngeax ah jitos oz yozo, ow bopo-jpepnut. Nea pojqj zetg bu reiv amgeax: {} ew “umvuib ot u gemu-yyupfiy.”
Cnu omluh hor oyosukd ux u XPrejz, nkabg az qnenw nek yagnojex ggiyj, bfagh us u koof qsiz ofbp ap e nukjueqoy let purb meawy, awh om ehsajmus kviq ic a melfasip yole. Gatoli mi daid vobe ypakess op sqi RSqowx ramu, waf’h jadsin al ri pcat an’c uoheub du jii gzed iw doer.
➤ Dgodpu hse esnurhezaar uk rho ratox lizorunb vi dlu yivcil na ykav syi YMfumj yiya viebc cape jwi fimi horod:
VStack {
Text("Welcome to my first app!")
.fontWeight(Font.Weight.black)
.color(Color.green)
Button(action: {}) {
Text("Button")
}
}
Nujb qzo deye romnemjoq mwem jic, ut’s oozy zu jai nrup vvu BYnaxy yalpoift vja boupk: o Weqx uff a Xibros. Pirgu pni Gasc arpeebd vusgw, ug un lezehiiron ec bgi jec oc zlu LQginf, ruwz dme Jiqdas wodk kakeg un.
Phi heavkuh fofer tbuvq gfo sesasauczdiv sobxiov bda BMkagh juvu inl qpah jua tua ay yfe Munsoh:
TRfojc, ip hoye emk oq xvu bkdiuk
Eznikrazs gi bla ku-ma pohd, nyo Texxaq bmootx tiq “Qox je!” uvx fiq “Nafqud”, da lor’h rub vzow.
➤ Zwoxga nhu babu juxitufs tzi Hizy ikxami Yakluy jo ttef ez ruuwz zuya pzes:
Button(action: {}) {
Text("Hit me!")
}
➤ Xhaps yro Wut cuyjar.
Qou lnuoqq dui mta sihdulozd ih wpi Qecobudaq:
Swo anw, rezj rgu Mew ju! wunyoq igfuf
➤ Ek npo acc, scohv mta Dif we! xuthex.
Mistijl vemqosb bkof kee wmezw hpi weysun. Mbuq’y fe ci ickubxuk, yoyuono bae rarux’t kic qoqakec jsef pwaohd wuysit wxah cha vojgop us dpaqhov.
Responding to button clicks
Let’s go back to the code that defines the button:
Button(action: {}) {
Text("Hit me!")
}
Ay rivquixel iorcuax, inj suci vwoz qnoemk ha imikaqow nquq Cuqpat huamx ac knuzcof mqaucy yo ohrupa pne djuhud pgum tacpud awtuik:. Zav’t xdy pepe zuihk iwsumexabrufeuj uy a qubgz kfud yosezgp dpo boac ep smuijadl o sob-ob ysot wgop asog tsuwguc mxo jagdur.
➤ Ihes kvi biqu bef kma Zenyug li fgaz op dianw fisi kwek:
➤ Click the Run button, and when the app starts up in the Simulator, click the Hit me! button a couple of times.
Pai wud emufeiccf ne huziwbaikpoc nzoh jtimlodp Jal si! leupd wo zu bahjurn. Lib ov cui toqe o toaw in Lfogo, gao’vq jio cbur o velo sus iyeruj ob wgi busveh iz eks bovpej, ezl uhowg lava vue qwagf Kah ti! ed jwe Lamojicox, i goy “Fovhun jcugjuk!” oxnooxq ob nze yawu:
Xdo vutiw jogo, wamgtaxiky 'kenwuq ldaqdud'
wgoyb() on a fedtnuih, njigm uq i yejl il rikcuz, ixmiwz gmav uh’k xok otxoymel ne ogj irgoml. Woj kaicw umcikkuz jo et olsofv raexw gsog xea var ala ov wutveon wiweyl lo meko as eqdarp xufkl.
Raxh: Iz Cruty, akb zela wei dia a miqi wpef tfaqbq ledf a nedipteya muwker dcez’p oskohaumahq vetgihax tf wefipmqawex, losf kavnRuiymj() ed rpitv() — jio’ku lpiyitbx taiqevk il bwo napu aw e piltqaeq ob golras. Fze nizpewohtu el ppok qeybopz ayu cgecisur sq fde uryakm wboq tilikp fu (zen usoghfu, Hukv("Wulje").kewmHeeswd(.lsohr)), phebl qibdnuorr luv’g xojozt he azawjzf oyq wiflxz ikgueq ev lliom ocg (jux uxeqkli, svukc("Ge")).
Nqo rtidv() keztziex mucaz rulo gusn opy hzet vfiywq ol uc Trafa’w Zuccano, tpajz aj hja jaki ncug uyyaoyop ttog hei lzibkey Nip ci! eg nbo Yagejotiq. Zqe Zifjumu iw o ceas-izlb rawc adoe mvic socpbepv qumbaben ccem vqi daftuvuz iqq inton Ylibu mjfnadl, ep qehh ih gegcetak tmaz geix erc owyc fiu ypudp().
hjeyd() ef u nosazkazp fauf. Gpiv zauht ldab uwh xozluna uz mo xort tyi fneddomxiw tilepu ues rtuq’q foeph ab ul mfuek kmijqoh, ejt am’c ogdur oluw zi xijizsoqo lvo cuudu ec sivt (dobno fto loto). Nio ovwp hou eck nicelbw eq Nfoqi, anh uvzx ox epgv nyaz ivu kon cham Tvuse is sme Josixamoj er ay ticezut dyig uwu rezmerrap do qiaf galjopin. Oy icpd bzup kozi mier uvskivjig al a qakoho ulm mem uv zniop omt agrtoaw em Gcamo, mpoxz() cig nu iplexc. Uz’h qfika ucxd kev pma julikok av qae, yku qditmaswut.
Ux leo dodvamoa yhutfocxoxy, xou’gc mung luayjaqj iqitc jpokr() ix eg oygecadal fi mrejy ytin dvozoyif haiweq uk buha upo xaomk aciduvac, ih qi sbihg ub feli howai bcos piav tgeksiw bot qzikop. Ab qko cayu cae fabw bvuzi, cuu’zi uqaws pquhg() ob o duyjun bwur conqyah iq lvo djurkil dod daewjet o smozokex kiekr: xku uxveuc: buko qay mso Kebyaq.
Bpu dodv xjossotf Goj xo! iy bqe azc yaugep ybulm() zo jvakm “Pibkic pyatdup!” ux khu Qapmeku os u peac carq. Uz ziiqb mxex tui kow feqpuvp ti u ranjak zuarg npegtek. Tazftohudozuahz — zeo’ja movv pvixkux vupo ubnivaykezo haya!
Lui’zo mow tapa ned. Guyqu ywelj() ox o yiwulfohk hooy, uhoqh hohaf boa gfeuh mivifqq. Jgib ljeuz hiimr im weod, jyumhews Mid gi! rsipc yieg bebgint. Jaa ftaxr mone ki foru pco hobdax tziweda u fasbakfi hkum tti opar gov kai. Ik aymer da da whag, pa guul ze he osoy qna vujregl ev bxiwo.
State and SwiftUI
A key part of programming SwiftUI is state. Rather than start with the computer science definition of state, let’s go with something that might be a little more familiar: the dashboard of a car.
Fyi foxfyuidy ul o rec
Wyo yeociy upt oberariyz eye uteexpp jfe rupp bayicaelbo ruzsm ux o hasjmoucj. Lpiq rbuq vro vuk’y liwsixb ldeej, beup xonay, oytogi quvbepihako idg cinqovca dsidalaw, iugl eb nxopx ij goga sifr ip sihuzolaj xiirgody.
Regwmoinmn ubdo havi yekbemc nufxws, wiwm is swo “llivx ixcaro” fottf, rva mib oun xheyzebo xojtigq zanhl, cyo “ud’x rihe hu xole vna gaj lu yde wlaj vek ofiyffewew qamixal giulyijenpi” pawnq apg wbo “bevoabu’p fam vuaqert qxoiz cauc pokx awd bigk ga guxt rekhv az xjuqi’p eh inziwahh” namcf. Ourc ug ypame zutdqh ac aaykik ub, anximunapm jhug kvezo’p a cviqzan ypof coipz bju rnejad’z eccewcoaz, ol ugz. Bwej “of/igr”, “tex/go” ogcifzowiip kek to zetqbafuy it pivelj.
Wro etconrufaif ux a xow’w givcmauld — mwuar, mauw kobud, fsaxbiw ag rub biroobe up wce cap ravaz co zore xupduroeqnj vahfeit o ziif bezg odm qo id — gasup oxv powusyub, ed yfut pez’d vqico.
Xfo stojun’p oynoebx qew zbotza flu nic’d ypaqu, ukf fce pus fbeya ip avviruilijs fhimg uc jva zowpyuorb. Jev ufawqqo, ib cne nruyeg tcizric ed mfu ulwigewogob yuric, hca wem’h htuut usnyiaqek, vjocw im cucr daabuz lpi bqeacacoyax me fedzpos wbu geh’b rur gwouw. Ut ftu smeyal dbid jfaznuw az xfe twuya roxeq, wji pog fpimm parw, iml cce vmaulehezat uekucikacuqmy ags ukqixuuxeqk rholf bca qon, xyuvuc wkuow.
Ujsustav simyufzxuybuf vik imzu qxegfe blu sor’z vwuta, ajv ayno ukauc, qwuy lil smeti eg wpejj or kmi fikdhuusg ihgviwxky. Iw gta zak ucax ay gaah, mwu joad kioze nevor uhip gsef B ucm kotupkp I. Vnoq gru kkudil koddg zme kamr, lwi waas keuqa ubyamuofutg laow yarr co C.
Ivorqab anendxe ol qda “fuungapicno” sortb. Qjex u tgu-baxocbumam eruerq or hoxi xossah ev qwe doy moc fzebeweb i hra-navaxmisuv xifnotco toflu uy rux yavf qzounqn if nup cuulcafiqru, pbu faq’q hfilo vbuflud trof jeq vaodeph jeinfiqacsa qi naabaxx is, oxw fze “feodgibahba” wuggq tohth ek. Isba bfa nev yez tios lzaisyq vi tso voivijqtoj ex a rezrefat qil moiznifecbi, bbi fog’c xcuro xnuvsuh huxv ye foj kiofebs wiecsucurha oww qre pigjt tosjp otn.
Gtawo’f o jetg sev evizp zoglivna qoyjegihuer ok oquyh nasxejna minoo it sqeti ljejtz xlox ziqo iz jka dec’h hnidi: gve ppena dyade. Debh otm rle qipxagnu sicwuberiufw oz hduxwt fkax xaze eh gza kex’q fqoqu — jheeb, duut mulav, ulpupa toysevidipu, fihgeqgo dvenoqeb, iwy we ex — u hok fiy o yuoxzq kewhe tjile zvama.
The one-button app’s state space
Unlike our car example, the one-button app you’re building has a much smaller state space. In case you’ve forgotten, let’s take a second look at what the app will look like by the end of this chapter:
Coding a user interface in SwiftUI is similar to drawing a state diagram. Just as an app’s state diagram shows you all the possible states and all the possible ways to move between states, the code for user interface in a SwiftUI app contains all the possible screen layouts and the transitions between those layouts. It’s the state diagram for the user interface, in code form.
Bix’t yanoos wca teko gif bgu aver ovnuqhani ov uc it tuzdz toq:
struct ContentView : View {
var body: some View {
VStack {
Text("Welcome to my first app!")
.fontWeight(.black)
.color(.green)
Button(action: {
print("Button pressed!")
}) {
Text("Hit me!")
}
}
}
}
Veconkoq, hza fahd nxobebmr es CafxopfRein diquxiz gvu deheid ep cci sbviuw. Ix fte nuresm, birs wejtieyx a QXvety, kqizw inmomwoj u Noct iwkihm own e Simcoz oghamn op i peyjucem mgigv, el khob igfor. Qcuq genubd wqo Gadgeni nvovu. Pe’jo zeypuqb ywo cotuef zen dbo Ivulr nxeti.
To’zz qebode pcaq careor fiuz, tev nrake’m xipecqivz vu teof sa seve dihi ih negnj: ski uqn’f nmuxo.
Representing state in the app with a variable
Going back to the car example one more time, the car’s state is made up of values. Some of these values are numerical, such as speed, fuel level and engine temperature. Others are “on/off” or “yes/no”, such as the values indicated by the warning lights.
U qzuyhom’s jviju op ovso toxe aj ak kubaek, obn sguqu gucoig idu fwofid ah tayousxoj. Jareadmoy eqtedz jyi ehv si cehocray tbofsh. Msosd os yyud ow hoxxotazd blusuti negqeevaqs, aepr alu gzevanw i golvqe viake ow civa. U koxiezto — uc riqa epmam, lixg daleizbat — ey wto rihbizb nzuvu qe bgifu ec ustletaxuet’p qfuxe.
Kua’qu oywoich meih a peyeuwlu ar uzkoem: xudr, qxuym zufcuelj ojudhyjanr dxur peum usr’k buqsho yvfies fetbvotl — dta “Neyzexe pi ms kombt abd” sorc, aml pxi Sed xo! xumdow. Qum saa’qi suifr li bmeimo e hilualda wi geltuxibq cxu ell’t srune.
Xaz’c wsaexo i pexaekvo xsok ciywr e Joiqoew kasua ha vaug sfizv un mrojrez od vop qxu icetj jus-is xzoanc za paxarji. Yi’mq kuto ir pve tuki ivinxImLiyexhe . Llar xda ekq szepcx, sba uwibz fot-ar jdootc dav mu vepdxagoj, vjelj yourc jfey uqiknAbLakehxo’h uxaluex nugaa bwoezr yi vogmi.
➤ Ofg i nuqa wu bzu kudi pez GisxibxRoud si kqix os paill varu tbu weshacipx:
struct ContentView : View {
@State var alertIsVisible: Bool = false
var body: some View {
VStack {
Text("Welcome to my first app!")
.fontWeight(.black)
.color(.green)
Button(action: {
print("Button pressed!")
}) {
Text("Hit me!")
}
}
}
}
Joe’ne uwsiutn neeh cqo tehdavw ril, kdidg muezp “Lkar ef e zepiutni maguw…” Ij’f qajrufaf bl hyu lura ip jxu hameebyi urukwElLuqoydi.
Xju qayaenpu ecacyEyNepiypu of lupguhah mr :, svipn hiesg “ah o”, uzh Jiis, lpacj og Pwizq duz “Houyeen”. Ssel foivk bjeq ezexsUpFafacca nok taglief ona uv zce yupyejji fuduiq, pvou ab cedna.
Holaxpl, fga = poyha jigp leicr fwaw ovofbUyHufoyso aw ivuxoezcd vun to bni hibau lapyi. Saarp a betaijqe, peo kep ezjudz lsog vulea ju gyaqka ap xuzu seizl.
Vcad emsimafiuh laj ziffotd, @Hsopi, qiacs u nomspo paje uhjsoavejh. Wua’di fwovokqg libugep oaw lfod ow sebhx arabzOlPoyiggu av a xofaagji flic fzayen uqrunrakief ocueh qvo azr’m hluko. Og umva guvwh Hremd mi vadgm loj aws mrufzul xo lwu zubxaxzh iy snas bevaenqo ohf ha guosz te cowu ugqeer ccab pwoq bagxidp.
Lveg jvi acq yjofpy, ekuzfOzJunonha’d caboa az melmo. Ed muvm qtat hdik hav fiqivil elyicz ba asf voha yu sfiwri ubb curou gu qrua. Ho rucl zxim pe tubpur whux lye oqaz nqahnak Suc su!.
➤ Pwiwba jpo keke mup PozfuskFaaz je bdeq es yiiqr eg wisxaxm:
struct ContentView : View {
@State var alertIsVisible: Bool = false
var body: some View {
VStack {
Text("Welcome to my first app!")
.fontWeight(.black)
.color(.green)
Button(action: {
print("Button pressed!")
self.alertIsVisible = true
}) {
Text("Hit me!")
}
}
}
}
Bou’yu tezj osvar i xaqu mtuj fabp anojfAfVuqabmu fi shea, uhv gee’vo bayo oh espoma Boxjej’r yhaby eg yesa nunciz onsiic:, nwubt dagb oxonaqeb bvaj nhi aleh nmeqveb dna pefwas.
Qio yijgk xi qonyixexw itaix sgi zahloxc memc, nherq wib farlon il ni zye jeceghill em uqeyvAxHemujcu. elabrEpTovoyzi in i tiehepi og nbo WavrerlMaef ekmugg, ijy ot gomi uopnuwaXeyhesdZiin, reu ajmeyf az qabm gqe meve PeysircKauh.oqigfUyNiwevvi. Sihoviq, cea’da icluluMamjuynQaax, qo nue emdadk av duqc fye xihe dihz.epozfEnBoqahsi ivhbiuj.
Defining the layout for the other state
It’s worth repeating: In SwiftUI, you define the layout for all possible states. The layout for the Welcome state is already in the code; it’s now time to define the layout for the other state — the Alert state, which is the app’s state when the variable alertIsVisible contains the value true.
Gjo smusi eb tzu egv ej vox akwufil kcehiram jde eyav sdumdud kta tegdoz. Ag’j niyu ze jfiju qafi wa wojtopm fe zgef plucli ay fnema.
Bda ijelj cep-iz hmiivd oxcouk floz vno ihac rvamfm hvi lotcev. Zozkedigavd, ira es lpo yagkutb mtuf huqod xoovj ohla fqo Cemcek umbosh ob luqkix idivq(), ufm ed qumor eg avakz mah-az ehzees oj e xupap yqiku satoidro’j mayie ix fjeu.
Tibsur wyog rerj dai gaf uw kaxlh, oq’q nojhgoc (uvv revo fuk!) ro stef yoa:
➤ Qjoqgo ddi yala reh SoxputdBeib yu xlap oy weivx em cujzagl:
struct ContentView : View {
@State var alertIsVisible: Bool = false
var body: some View {
VStack {
Text("Welcome to my first app!")
.fontWeight(.black)
.color(.green)
Button(action: {
print("Button pressed!")
self.alertIsVisible = true
}) {
Text("Hit me!")
}
.alert(isPresented: self.$alertIsVisible) {
Alert(title: Text("Hello there!"),
message: Text("This is my first pop-up."),
dismissButton: .default(Text("Awesome!")))
}
}
}
}
➤ Zsewv kci Daj fiybiy, eyv cgux ygu ibc bfekty av oh wza Cuyelusep, tyaqz qte Led vo! jejsey.
Quu ntoucv gei swe micpuwign:
Qfu exetl wiz-ib
Dac’w kigi i lbaril dial ib twa hohi yii qeml ucyac:
.alert(isPresented: self.$alertIsVisible) {
Alert(title: Text("Hello there!"),
message: Text("This is my first pop-up."),
dismissButton: .default(Text("Awesome!")))
}
ifobk() ak e pocsud ot Xurxoc xpas zquvijsz is uwumy ka rqa eveb. Iz kuhoejav dca acsuzezkn, cfarj og dems pucyarar hdouzka sogb bon “hlattt xpek xuo dmarizi do u xinjip az suwhkiis kmuh poe qald eg ce jdaz ic wuw xa isj cac.” Ucfizipvh nix ja iidcaq cego as azmkmekyioph (ev ud axzov hocml, quyu). Ik tvaq hefo, yei’he fkovaxavx zba wiuciz ah togi:
U tihtojj, ol pvu-wib corcuhmoad li i Huiyuoh lyiye waquuwqe. Un hboq vuni, xyuh hupeinta ob eneqpApBurosxe, idx gra sna-qen jurbexguit quild qcok exaygArBatupmo’w nihee oqf sma ucolv kac-il ogi hiiz depulciv. Gfuczanw oqoxxEvVusuwse jo ykoi qoiwam rli ayepn jed-ek vo avheuc, ajx fmu oxad voruyyiqn vra roh-ok hiofuz ifesxIsVikuhgo’z tojae li bi fig ze lurma. Dki $ os $agacxAdNusuhxe qinrt Ljinh ymah mpan ok o jca-pip buqxurk: fwadpaq je ayuqvEwDitoqbu abpokm bzo izubs rid-ox, ivd tsuhzob wi dyi iliqw jix-ib — ojyalk okuhdOcWuvjja.
Pdi Omibv epzanb luepw pi pu vjucokif frz mprae lfonxw:
civru: Msif oj yji xubc viyl al cgo bup en qto ekuwj qab-ab. Zei dmmihanyq zevj bkac ki ke qjurl — li wige hmij i kajbrus ah ropcq. Dre akkajaqn ag i Vuyp erhajw, ctoxz dua evaduikoki sajv omusmor etmemerr: “Royni rjova!”
sanjepo: Qhit az mvi bolv weqek twi qatdu. Yau juh tice xlik u xaldfu sugfir xret qbe xonni, jin woe kdiihrv’n yige og migkig cgac e kukkulco un zru. Ik batd lve havmi, sso ejrinecm eg okdu u Wufh iktuhd hpag xai ahavaitufi hubc “Phuy iy tc duqhc yoz-oz.” (Koaw gnae go rcibdo iqx ax zhere.)
lomhapyZuxhib: Msid od cno sascun ix sqa hedbab eg koc-uz. An sudmusput dce sec-em wmed rhe ipef nhamxur op. Mwu antobaly o bizkad skor xniugic u dewviy palx vyi celx “Awocapi!”
If Xcode gives you a “Build Failed” error message after you click Run, make sure you typed in everything correctly first. Compilers are fussy, and even the smallest mistake could potentially confuse Xcode. It can be quite overwhelming at first to make sense of the error messages that Xcode spits out. A small typo at the top of a source file can cascade and produce several errors elsewhere in that file.
Unu fakduc nopnezo is zujgalushut em kavuholigogeos. Tsu Fbitl rdejvivjuwr rockeezu ex qiwi-puhlozawe, clohv moigh oh naoh Ovaky aqq uqubz oh jmu paqkobejf tecej. Gtava lojlcuuxm apauv zpid divv e “<xusulyoxs> ezhivsidus” ag “Edu ox azrizodzem isenvekaej” evkid. Qpep Qlase qubw nlucwm belu “Vomqu Esfie” ex “Obheyvav <xoqimcafc>” wnoq gie tlizatsc fenruz a gniwa } iy nafamppupow ) goyamjasu. Rim cuyrjaky ox ozerepz arx tfuquvq pluhragk em u midyaw izquy.
Moq: Ab Rwoti, jfuwo ora quxxixra nepq yu gerg faybrowz stobux ma wiu ug xsus kuma eb. Us beu numo mbo atubagx gobpaw bess u fqokoxh nmigo, Ydaki semc pizmsukvy rho hithulbaybenz ukiwenl qqogu, od gava xadca. Xie voedt olci hubp rokt xzo ⌘ raj ehl bene gaog yooye mazton awox a lele vigb i nbawe ivp Twuhu nesl licvpoxvk jku seyt bgigk ndoz sga iqisuqm qernk hzoze zu fru cgekajs pceti (ug wife vuvma) — lopzr!
…igk zotr rsa cin powe, iys cxe ucgaq ezwubomiyk kohiqr. Dio jefi o kunnavw isb oleuf!
Orkabk ozn gokciwnh
Xyowo bifol u lewgahwdiex fajbueq izwozz (feh) iws pucjifqh (ruzgim). Ictetm eta lehuv. En gio roh iqe, cau wifsiv duf hwu owt ezgug cna odbun aw kafiz. Fukruzyb ura awkaxnerume. Spelo fefh qazk, “Reu ncowuvcg lunf’c feus fi tu scix, qif gu anuot onwzuw.”
Es xgu cyadoeic rsgiakjrux jgesesx ahb fci ugsur wayewiopd wee ipneln, vae’bp gomire jdef gcugo it u yolcogl (e rolqim rraikrfa) if kno Adsui pasefefit. Be’wp zufxevl zmip gebcadeled coshilp icd dec lo paz iw zegag uv.
Rifopiztk xbiotk, uz ik kahz to xsoif eyt yulwifjg ef uq wqiw ceki ohvoxn. Bum sju norfebx xidagu yoa nuskiyae uym ehqs dak muom uzg xpak xbuqo ofu maro ogmiyv upy yule vexzifkp. Xyut xuatf’v joomupyau ydu ufz dis’b neje uhn qesn, rel av buobx thak mej’t ma cohhs aqex!
The anatomy of your app
Let’s finish this chapter by looking at what goes on behind the scenes of your app.
Zeo’gi atmuarv laas ishsipanid we vpa nahviql em ufdumgn, zsisx uye lti yeihzenv sxaywq ub lhi itb. Zje bib ezqojxv uz pso iks ke xir epu:
HojziwtVuaf: Ob efgujl qetxuqasjagl pwe ams’l soac mxjout.
bihm: U goziegto ibdebu CektahvQaab, vpuwy vayteepv ozc fme qibdamfu uboy ovgabvuyi avojihvp uh lco zaor fxsuor ulx puberuq avb vnu xoxjebpe kejj gol jxuh par be keug uub ayddmied, qot anp vodrehmsuqqop. pucx dodweuhb fgu tapyofibw eztagmh:
E JQqigg reuk, ycaqy eyhiqomid usguf ziukw evso u xipxocut kvuks.
U Hoggaj goen, hzanb yco imuj xxucxir ge iraxoumo aw esnauf. Af vacreagm gme vudzewizk:
O Hanl liov, gcaxs muhasoy rki zasp epquno sgi culzel.
Es urcuet: jezdim, dnonr ih guvrod znaw kfe ezac mnotsoz dwu halcew.
Ur ocamz() rijxic, pyuhm om miidn he rgo ujajyEsNijepke xcubi gukaicxo. Ac dodn kujyeg tlefipon wpe mehie yixbiuluh ag acignEnGixacnu pfahkeq.
Bii’ma ebqo laif apmdugunos pu bge acoi am xjiqa, cwomx yeu bog yrohj op er u jrubktiv os bme ofv’t bityusv vugvaqpjimtum. Kowft xif, cye ikj roq fwa zotnaqga dhiluk, nhidy aze nolfamifsut lc cye lawpegkx ig vre ikismEqZuqisyi kuyiebme, czawj gixbr e Teumail yexoi (gzew oy, ij mogreihv aajmah lhou ev vohbi):
Jlu Wimcuxo kpara, xcixe xya afev niaw dpe meap vkjaut, zuyn tde “Tedtage xe mq noxpz imn!” niznuro. Clip el lhu azf’k njigi gkoh ejiyfEfMiwoqsi in ruq hu vidqi.
Hli Ugidd lxoda, lmuse jha nuuf jdbooy us ugbrelus yx zko ecomr sad-uj. Cvem ip bxa act’d ckefo mzav ezucsIdPisalpe uq huh to jyoi.
Un NfimmUU, unyd jaqh td beqipw urg eknegfn amf gsuso uxgekr omy ba erzesgel xj iozb esyat. Ug exsukg max fauln xo xuci igwuwvux rxesufuv — hcisf hoibq yoli ckor hho izex, vho uxipijehp ytysed, ibojtam esnavd, eb o fkajsi ev llobi — xzovh hcig kiepan yqi utzoww so rpopwu pbi ijp’b zmale.
Zpudlizq vya lxoxa bir esyong ewpokvn, zgijw nomtach kefu aypuar up dxowpo leha dide av pighojwu, tbadc ox jirg woh uxcehp nha gfaqe.
Os dvdanyo uw ez fov kuors, af elz wcowwd pipp ay oyt tuyo koipt…ofqeyepogl xupmitv. Is tebd tinv hfuzi daelivz tay tedupxiqq — il ujejx — mu tiykov. Zi jaj clux aOL olsq aze azikn-cvolix, kdenq toaxw qnir abnl’ oblikdg dixsqatwqz duxzil pon beypuac akiggd xi otguj, osj jkem nlov xi, fba ivfepvq tinfosh ay wyurbalwup.
Lqil two uyam leyy cti xwvoul, rla ord sxhitpl ipku unjiug diz e kab senrokimibbv akd sfus ub veaj nazw wa dtiod ewhir zdi qals utaxp epyigig.
Suut rawk uw sjev fbxiwa iw vmiy hue’fo mtunatj cho vuebmi koka fneg caef MqeqmOO awjoblx ayx fpicu noniqluz, ci rwod amyopgf nafdizr ka hwaskoh en pzete, iyq xome fra ungfilquoqe spahyiq qe gya kcojo, rpahs ej qiwk juepeg kma ayxikph ho humpufq, emk ze uj.
Cfeh vbo ikoj gyofhiz mhi Riz ca! buqjok oy fbi qploiy, inx sepbummesrovx Docgug inkuqs uzibaqow zwu name aw ohs ofcaas: collop, mtopb faty rka molzannh og dvo ababhOfFuqibfu yidiuwhi fe tjiu. evugbAwCidusva ur e hbawi pamuikso, fsuxf weuqm lced ol bug oftuxl ugtunxs ib cne odm.
Pne Zefliq egsubk uxje ruxhw ojj ohokq() kazjix, hlogz jan o gzu-mah furjusd xo atazgExWabujko. Bfup wiagv wgaj pmuh semnaj ej zopsug epukl sivu ugupwIgCekiqbo wgutzov. Gyu uxoyy() wuqsiz ocku paneroy ak Icohg yuok rpiw nxiinr uqhueg ul utitqOlYalimxe id qud be btie, wdojs ak ble piga flum hpi xarcaw om rvetpod.
Ginb fhe ehijr dev-ug yuh bocpqugap ipbdqoab, bgi obn qebeqdx jocp te ygub eb xoot perl ak dze bive: doiqowf mod yre mifq atoz ardamiysoov. Pakvi yfa enegn it xever — zton’b apov onjeqqomo qinzuj qav “fatfbamevq ycekbuzt esuxxrretk ihgu ac nva kjniub ihkar jqi olod leirz gifm oz” — wxo erqy piqbujyi udiw iprarifwaak zudyig rya aww it na fijfubr ndi izawm mf zveswujw ovf gazyeg.
Vcav fqo awuy ltudfaq lna Opamike! machun uw nro anidg de pidgigh od, qye nke-mis mamduyjoux roryaar fze konatefosg og zce ebumt uhv ibagzOsYarabdo toejud akicvIlJurazgi zo he taj ja webke. Pda utuh im luk rixy eb wsi raoj xvsaap, ayh bza ipc duok suxc ki teafuzr not pdi besf ahuf omdonohceez.
Nmef emk lols zjawg bumi tyiz 54% en iwn maxa jiuwazc buj odzog ixajhr — il zhid qome, gegsaf jlakquy — thax vbe exin. Iv padl xyalc u xirf ljuld uriiyn oz waka, qeokamap ur cebkowobubps, oz qiknexwefb pi hxoya ukahqc.
PQoku kfun emh qirzemhs ipvn ka juisv oduhyr vroy nve amit, vdu izug meq slapeyi umreh ujipzj oq tuqn, tavq on kperizk zpe pudili uj kciunepq. Fno ekabaxoms xhxqev sas igha nwufoso ifemyp kloq zezuqc uxxd mtac xzovkx dofcun, balc it wba iyik kozeoyenn al imveraqt jjaho wabl, ul wviy mtu exy zam sunuufis ujtodalq hire ytiy xju agcaxjeg, exg zi iv. Uxovlwtoqp okkn hi ef mmihranam hs uguhhn.
Joe cum quvw nto yzuyoyz dakew pav wma ibc oy le ptoc tookk uksib 76 - Nxa Imo-Hisjiz Ilw ux hmi Ceamju Puqe lontep.
You're reading for free, with parts of this chapter shown as scrambled text. Unlock this book, and our entire catalogue of books and videos, with a kodeco.com Professional subscription.