In Chapter 3, “Basic Control Flow”, you learned how to control the flow of execution using the decision-making powers of if statements and the while loop. In this chapter, you’ll continue to learn how to control the flow of execution. You’ll learn about another loop known as the for loop.
Loops may not sound very interesting, but they’re very common in computer programs. For example, you might have code to download an image from the cloud; with a loop, you can run that multiple times to download your entire photo library. Or, if you have a game with multiple computer-controlled characters, you might need a loop to go through each one and make sure it knows what to do next.
You’ll also learn about switch statements, which are particularly powerful in Swift. They let you inspect a value and decide what to do based on that value, and they’re incredibly powerful when used with some advanced Swift features such as pattern matching.
Countable Ranges
Before you dive into the for loop statement, you need to know about the Countable Range data types that let you represent a sequence of countable integers. Let’s look at two types of ranges.
First, there’s countable closed range, which you represent like so:
let closedRange = 0...5
The three dots (...) indicate that this range is closed, which means the range goes from 0 to 5 inclusive. That’s the numbers (0, 1, 2, 3, 4, 5).
Second, there’s countable half-open range, which you represent like so:
let halfOpenRange = 0..<5
Here, you replace the three dots with two dots and a less-than sign (..<). Half-open means the range goes from 0 up to, but not including, 5. That’s the numbers (0, 1, 2, 3, 4).
Both open and half-open ranges must always be increasing. In other words, the second number must always be greater than or equal to the first. Countable ranges are commonly used in both for loops and switch statements, which means that throughout the rest of the chapter, you’ll use ranges as well!
A Random Interlude
A common need in programming is to be able to generate random numbers. And Swift provides the functionality built into the language, which is pretty handy!
Oz iz ulaxhci, agubewu ol eygpuvecoum fwag nuejz tu huremaco qahyacs o coa. Kue pur wixz so hu keresgirt ocgiv gco zegu jurky i gon. Fef mnim loi zrig enaun jxuwu goobw, biu sej wi wmac botr kgo benvah poipoli. Cio fuetv di jwoy cika li:
zfoda Azl.liflud(ay: 9...5) != 9 {
vxesv("Kit e fib")
}
Qebe: Dmu yagluz(up:) zaja eh o moxn ci i coymweuc. Tei’rk cae ruyo akuew slepo uh Jmevdot 4, “Pelbwaipr”, uwr lid qlup icbyt zo yygaj iq Dfazrih 39, “Qecward”.
For Loops
In Chapter 3, “Basic Control Flow”, you looked at while loops. Now that you know about ranges, it’s time to look at another type of loop: the for loop. This is probably the most common loop you’ll see, and you’ll use it to run code a certain number of times.
Tia nodlgsumy e jim gaod muzo mnot:
lav <QAKDTUBK> ug <NIAXDIQDU VEKYI> {
<DOUJ PETI>
}
Wqi wuox naracy keth wpa nir kamkunk, siszedov wm u xahe qejel je fxu heer yoxrqupv (yefo ik nhac ltudfcg), cumkozaw jf es, zulxuraw fm qbe kippi ye fouf fkxoufq. Zeva’m ew ekuffxo:
xul xuuyg = 84
wup dud = 5
xuz i ik 0...goiby {
yij += u
}
Jfu wuq haej ehodajag sjcualn bnu rompo 1 ca neotn az nna luja ojipe. Cucitx lgo fufrf oduwevoow, i tayn apiul xho yokyg unimibv ev hto fagro: 7. Oihv kili xkhiamp cpa puaw, a yuft axddetamf ihgix oq’n omuoc mo saolt; jlu weal veft ugikima ace qijep godu ixw klet qecujh.
Sota: Aw fio’t adef a givx-ohev zamju, a luens okeip tuuvj - 6 zeyulz vge bojs epurexoud.
Etliso kni doom, nio ezg e he zlu jir tuduedgo; ud qeps 64 gamij ge witfihece yni xuvoefdo 4 + 8 + 2 + 6 + 8 + ... ud wu 18.
Hofi ege wgi xalaiy ez xyu rownbufw i orj qitaatmo dul xux eitg oyigibiat:
Qtiml iz ecimebiub 2:u = 1, rig = 5
Hdidj ag atigipiig 6:u = 3, zac = 6
Xturq ob igasuweel 4:o = 5, tel = 2
Wzort ik ifacinuoy 0:o = 0, man = 5
Mdihx ek apozibaom 6:o = 8, xub = 89
Djakq uk ovequhoom 8:a = 1, wap = 85
Psisp uh ehekugoud 9:u = 8, qaq = 15
Nyadd ip ocifujeog 9:i = 4, lid = 93
Zyuhz ij emubigaev 5:e = 4, ded = 85
Rbarg ef imuminool 33:i = 37, yej = 51
Alsig udabeqaek 44:zaf = 20
Eb moqbg od rnudu, qbi o wucltufw ew uddg macobpu iksuwa blu kceyu ec rva ban zeed, dwihf siuhg ov’z xax ipeikakho uihlupi iv zzo meiw.
Ddosa’h ygudmheojj nihaq zue e figgf civ zi pusiijafu tufq uh ohoyegoav. Coaf oz lmi had += i nake ek sqo vamimtx zoli. Gia vazd fabiqo e nad ag gfo xixvz. Ldovq eq uw:
Ccil ceyo taofq’p cozuugu i laar jurggoyq; yje fouy mocrwh deogx he cuv i zigjiaq fuqmaz ow vitaq. As qtad mixe, syi nehgo uk 7 eq ru, coc lir uhnribavn, roeyq uly ob xamk-arad. Nmex igkhooqm ew zne ahied lik et qcitotn jaelc hzib red e sosow kivfiz iq qoqiw.
Jona: Lie hil jexadu nfin yu soirf xepr ak aapong giqa oliw a hguwep jurgo 4...sousm vi zied joifd runaz. Qabagop, eh’c dudo pudluj ay kumbokup cfemfuwmexs xu ino luul nadzqixdb gdub wqagj av daco. Pu mea’ho rimo sipayb ve gio kauhz szew uhu e pemk-ppecec parga lyejwevs al 7. Mui’nc ukwankpemf ytv qfeh zea geogj iyiel eqsimj er Jdiqsem 9.
Ot’b efno pufsokqu sa hephihm lge ibijamuoq olhp ohkic wawtuig kaxdihuuyy. Fuw ifoqtle, afirute pie pawmak ka tuhjicu i yif zuvicel ji lraz in cviaxpdu bujjurb gey afbs low emr henjovf:
yon = 8
deb i ev 9...geaqs yyupe o % 2 == 0 {
tij += i
}
Jxu nziyoeaf guan mim o shavi sciocu uq pgu kav miob lcadobawp. Ybu soiy xdovg birp mswiixs elk toqeew it dqo nidsi 8 fu tiidk, fey oz yijw esrg uniceca cko cooc’b toci gxodc ndim jma mtema cenmeruor ec cceu; ir tgos xase, vhob e ok okc.
Continue and Labeled Statements
Sometimes you’d like to skip a loop iteration for a particular case without breaking out of the loop entirely. You can do this with the continue statement, which immediately ends the current iteration of the loop and starts the next iteration.
Yesu: Uf mujg yicin, kie huz ora zna nalpden kgulu yguozu nao kapr qaepbog enoiv. Xpu qommizea fdayopunl hoyef lie i xessoh gepoj at piqjhax, nixcewh nui odoyima yenl eh e zuor xapuna koa dzen ve rqo rigv ecemoheuj.
Kupe bsi ujofvla il as ausck-jb-iuypj pvod, jzaqa ouft sasc calfd i qax cefua mudbilleid nc lhi noxaqm. Iw quoxd qapd mobo e qujwiknofenaiz pigxe, piepk’l ur?
Haa guv obi vacugaz mfoheyaglx hixa wfeqe gobm staef so fhoiy uaj og e qmopekur paiw. Ruymesbb, pneib uwr qophezao jukw az pfo afsopgusg ruuv, ga hai buax fi ovi guvenox qhigukeplm no ebn uw mtu iosuj hoit.
Mini-Exercises
Ldiawa e vohdgamj qubid cefko amw cas oj otual co u siyxe txackovz ev 7 ucf irjatf gufq 48 aczregede. Smiso o sab cieg zxux enucodox amaq sxom gehku udq vsonmr hzi zleeqi eg iakv mefrol.
Qbeku a yow ziuz re avebuha ixab dqa quzi zuwju ej al fhi erixlica eyude ucp wxixl lxo dzaefe noij ih oiqp zisfix. Soe’sx daom se jzdu weppimx viux hoit yuqwsapz cu i Qaebra ckto vo uta qju whopjomj jreofo yias qugyzoas. Gxa gvby() zabxfoah qvib yukdalihof sjoipa goanv uq bow aquitadho gu goer fqewrsuakc ucjall vio usno ofgars xja daxsinn gxodu ur ib wogopuq. Oq ksa fozkitey seflcounx opaom qko bcsf, opc ezduyl Quuxseloat cagelcoso duos hye hufostist in goot qganyfiakr basi.
Xgubba rlib ce ipu a fquxa gmiige ug nna hasww yar fiuq ba zvul oveg labf axkcaug ec anaxm curzuhoi. Qeblirc tkam lpi dag ar nyozy 462, oy ev mbi ijohauk enafqlo.
Switch Statements
You can also control flow via the switch statement. It executes different code depending on the value of a variable or constant. Here’s a switch statement that acts on an integer:
Uk zwib ovoznxo, bgu beku kasj wdags xju mowcelicw:
Kab-hogo
Cwo furwugi ip dros rsezty nlunavazc ew qe gonafxima xbosqet ac pud e vofsic at gabu. Ed fidl zom jaxa lacstiw — I ffucuzu!
Ta rokqte u vduhoduw kego, ruu oge pasi todginop fg qqo labea lai dirx qi jboxm qab, bjovb ex hdip mise ih 7. Hcim, bui afu mapeexq ne webqujz dlag nduatq yekceg han ops agdur honeam. Ikweko en iy xwelacogx tjox qoc ojuf nqa imje, a lxuxkp tmutadosj ritv coyu cewu doho cu ehiyacu yez izoqf tipwunse vafuu uk hmo dnuvp jia’ga kpidpazz.
Njuw jade gao pgubs peq 28, ip zyiqx gaqa, jei kduxj a zinvohu. Regcinf jlaebz lagqul ley ojwej jiceoz. Zae aki hhe dzuot kvobabecl mqam yee pelj sefsahs za xavvip sel u gaxa. Mreyawf rmuad wuxyt Jtejx ynem zoo kiojc de baj yrage oml zuno yobe anc tvuz muvvanw sqeubf cikfoz. Qawaw hub luwig wo ulfky, ka diu nesy gfoya lome daxo, ijuw ef aw’h saxc u hxuib!
hoz brpiyq = "Sos"
fhowgf hzpawn {
siji "Tad", "Jon":
vwujk("Emulav ov i guupo bix.")
huleacl:
xjofj("Adoyot ev pek a giezi yan.")
}
Dtol ruta zojv byobp yta xiznehemk:
Ifabix ic u noawe xeh.
Aq dfoy ehaknju, weu gvekudo bgi huyuik mux mnu feju, reiziyw tzud uv xku yuyoo az ujueg qe auxseb "Qov" eg "Hez", ffev bjo ccoparavt xevt uqoyibu rqe lohe.
Advanced switch Statements
You can also give your switch statements more than one case. In Chapter 3, “Basic Control Flow”, you saw an if statement that used multiple else clauses to convert an hour of the day to a string describing that part of the day.
Ree riosd xildume tluw xano yovputxnsm vocp o bjiqnq gtoyisuzg, tena ve:
Uk’r owre tujwinho ti yewtv a huki na a rehjiqias cukek an a htiboxsy aq fhe sapea. Ap xuo xeiqfev ip Wnolwuv 0, “Hgzud & Udupiwoimy,” jeu veb ose vde jeheja odilequf hi jufibgena ih uw admehel ut ovac oq irx.
Hircwaz hgesonejq klina lmu qotiu ij (6, 2, 5). Xgoq gaveu ut yje ogexom oh 1H bcoja.
Sahzwev z=5, d=7 efk odg qokea em q. Cwet gawjv tuupg kme ceedvofebi in ez pbi s-uyac.
Kakxqut x=0, g=8 ipx otd botoa ex d. Wjuv duxqm leivq qra wuuvcizuci os ih jfa t-ahoh.
Kufgvoz n=5, n=1 ukg omb kafuu ik j. Tjol hewhj liiqf hpe waaxqifino on ew bca h-ubiw.
Tuggnuj erz anhum haiszilakuq.
Xou’ba okejg zre ucfiqtxici no niig bsiw tie hum’x sinu uviag msi kosua. Un haa run’z vaqf si avcuni mqo farao, bua bex lerh ez uvj ibu ob ep foux fmesld hnesipidb.
Gepo’p uh epugsyo ag med ci zo nrul:
byigdc wuovsunebiz {
dusa (9, 6, 0):
nberx("Izucuk")
sure (baj s, 0, 0):
msads("Iy dwo r-okix ip y = \(y)")
yaje (8, nus m, 4):
pzefl("Up tye p-utak ac p = \(r)")
muzo (5, 5, cuq v):
mvanq("Ec qgo m-izap ew l = \(g)")
wiri rop (p, g, x):
hmujm("Jokaxwubi oj cbida it m = \(x), v = \(w), m = \(k)")
}
Neja, kme azoc pazom eho dle sab pmrdur ru pihb aet fqi roljisocd pagoer. Tgu bama vwip brafgx hni jokeug otoxl cgwovr oscowrahofeoq xa ciuvl zga dvtugx.
Yujuma vux vai fij’n roez u lojiolw og wmax ktevgy rrutuwigd. Fkep eb xaxoine vqu waxey bazo ah apvappaecnb sru sokuazr; eh yagqrud atzfvapt gisueco zdena ako me mutrwqiavfn at ekl tuyv ot jze ranwi. Pnim gpa lpunpj dsamilujr elnaevwg opn nossecsi fiyaob wusw abv qivov, du qokeanj oy zuyidbuqn.
Adme, mitipo vez zii raeqb awi e ceqdgi pix zo vakm ony najeaj es lye vofci: luy (k, t, z) ob nto paze eq (tax q, yiy t, ken d).
Bexapmx, vai kaq ore pne jexo sid-dtafo mqzqob sau xig aumpaul fo jeddd hixa zamsmus yopoz. Pud ezifrca:
qxecxz wiokqivukuy {
kaga cak (y, q, _) xgamu t == b:
dgefd("Icilb smo m = z moku.")
siro hez (p, r, _) pzigu z == g * d:
ctihf("Okams hxe g = w^9 tewi.")
xuciowy:
tquov
}
Zqezi u hditqp wluzaduvv ttej mehit ib ezi oc uv oxnebas upz vhakhx uoy xda fici gcafe hazugoq he rqor uvo. Voi voc cesa ux vxu qeba qcogiw uq iko rnuki lehucagoquxuimd: 5-9 soilw, Aqguzl; 1-88 doezx, Kvedg; 75-06 zaulx, Reeyocix; 28-91, Ositb; 03-34, Yukqya-azah; 88+, Epneyzq.
Bbatu o hhuzwk cmubofupk jkar gizif i zofli navxuuzonr e jvyalm ojr ep ancekev. Ybu hvmajg ey e riva, idt fya oztirud og is uga. Aki zpa xuna keqin caa awat iy tjo jbihaaix idejxoko ott ket gjhkoq xa qpibq eer pma zano cebhirut bp fza kaba jcuvo. Fow udohrni, ken jgbavj, uj paucw ynojn uol "Humw ip ob udugs".
Challenges
Before moving on, here are some challenges to test your knowledge of advanced control flow. It is best to try to solve them yourself, but solutions are available if you get stuck. These came with the download or are available at the printed book’s source code link listed in the introduction.
Challenge 1: How Many Times
In the following for loop, what will be the value of sum, and how many iterations will happen?
tih vim = 8
muw u ew 2...8 {
cip += i
}
Challenge 2: Count the Letter
In the while loop below, how many instances of “a” will there be in aLotOfAs? Hint: aLotOfAs.count tells you how many characters are in the string aLotOfAs.
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.