Another loop we can use is the while
loop. This loop allows us to continue iterating for as long as a condition remains true
.
while condition {
// Execute while condition remains true
}
while
loops really shine for situations when we’re not exactly sure how long we need to loop for. For instance, let’s say we have a simple dice game that keeps a total of the numbers we’ve rolled. The goal of this game is to keep rolling until our total is at least 50. We know we’ll reach 50 eventually but we don’t know how many rolls we need to reach our stop condition. Coding it up, we get:
var total = 0 while total < 50 { let diceRoll = Int.random(in: 1...6) total += diceRoll }
Now let’s break down what’s going on:
- The
while
keyword starts our loop and accepts a condition:total < 50
. - Just like the
for
-in
loop, after the condition is the body enclosed by a set of curly braces{ }
. The body’s code is executed during each iteration of the loop. - In the body, we declare
let diceRoll
with a value ofInt.random(in: 1...6)
. In each iteration of the loop, we’re declaring a newdiceRoll
that has a random number from1
to6
. - In addition to reassigning
diceRoll
, we’re also addingdiceRoll
tototal
. Eventually,total
will be at least50
and the loop terminates (ends). - It’s important to note that we’re increasing
total
because it’s related to our stopping condition. If we forgot to, ourwhile
would continue to run without any instructions to stop. This non-terminating loop is known as an infinite loop. It’ll continue to run and take up our computer’s resources until we manually force it to close. Therefore, remember to add a way for your loop to end.
Instructions
In Guessing.swift, we have both a guess
and a magicNum
variable, each storing a random variable. We want to create a while
loop that continues looping for as long as the values of both variables are different.
Under the variable definitions (but before the last print()
statement):
- Create a
while
loop. - Give the loop the condition
guess != magicNum
. - Reassign
guess
toInt.random(in: 1...10)
. - Also reassign
magicNum
toInt.random(in: 1...10)
.
Note: if you don’t reassign guess
, you may end up in an infinite loop. 😱 If this happens and the program is running forever, refresh the page!
To find out what the values of guess
and magicNum
are during our loop, add a print()
statement inside the loop that uses string interpolation to print out:
You guessed [guess], and the number was [magicNum].
Where [guess] and [magicNum] are replaced by the actual values of guess
and magicNum
.