A bit late, but just to add to the various answers. I believe the elegant solution to use now is this:
func fizzBuzz(n: Int) {
switch (n%3==0, n%5==0) {
case (true, false):
print("Fizz")
case (false, true):
print("Buzz")
case (true, true):
print("FizzBuzz")
default:
print(n)
}
}
Swift can switch on tuples (sorta structs, but constructed on the fly without a definition somewhere else in the code). Then in the case labels you can check for multiple values at once, which is ideal for FizzBuzz!
To break it down a bit, this part
(n%3==0, n%5==0)
generates a tuple with two boolean values. Then a case label like this
case (true, true)
print("FizzBuzz")
checks if both these values (essentially n%3==0
and n%5==0
) are true and prints "FizzBuzz"
Doing it like this makes it very easily expandable. You can add a third definition to the switch argument and a third true/false to your cases and your FizzBuzz can become a FizzBuzzJazz. You can also name the values in the tuple if you want by simply adding labels like
switch (fizz: n%3==0, buzz: n%5==0, jazz: n%7==0) {
case (fizz: true, buzz: false, jazz: true)
print("FizzJazz")
}
making the code more readable in some cases.