Switches can switch on tuples:
public typealias mdyTuple = (month: Int, day: Int, year: Int)
let fredsBirthday = (month: 4, day: 3, year: 1973)
switch theMDY
{
//You can match on a literal tuple:
case (fredsBirthday):
message = "\(date) \(prefix) the day Fred was born"
//You can match on some of the terms, and ignore others:
case (3, 15, _):
message = "Beware the Ides of March"
//You can match on parts of a literal tuple, and copy other elements
//into a constant that you use in the body of the case:
case (bobsBirthday.month, bobsBirthday.day, let year) where year > bobsBirthday.year:
message = "\(date) \(prefix) Bob's \(possessiveNumber(year - bobsBirthday.year))" +
"birthday"
//You can copy one or more elements of the tuple into a constant and then
//add a where clause that further qualifies the case:
case (susansBirthday.month, susansBirthday.day, let year)
where year > susansBirthday.year:
message = "\(date) \(prefix) Susan's " +
"\(possessiveNumber(year - susansBirthday.year)) birthday"
//You can match some elements to ranges:.
case (5, 1...15, let year):
message = "\(date) \(prefix) in the first half of May, \(year)"
}