这是一个更通用的回答,适用于那些只想知道如何在Swift中使用switch
语句的人。
通用用法
switch someValue {
case valueOne:
case valueTwo:
default:
}
例子
let someValue = "horse"
switch someValue {
case "horse":
print("eats grass")
case "wolf":
print("eats meat")
default:
print("no match")
}
注意:
- 不需要使用
break
语句,这是默认行为。Swift switch
语句不会“穿透”执行下一个case。如果要让它们执行下一个case中的代码,则必须显式使用fallthrough
关键字。
- 每个case必须包含可执行代码。如果要忽略某个case,可以添加一个单独的
break
语句。
- case必须是全面的,也就是说,它们必须涵盖所有可能的值。如果包含足够的
case
语句不可行,则可以在最后加入default
语句以捕获任何其他值。
Swift switch
语句非常灵活。以下部分介绍了一些其他使用方法。
匹配多个值
如果使用逗号将值分隔开,则可以在一个case中匹配多个值。这被称为复合案例。
let someValue = "e"
switch someValue {
case "a", "b", "c":
case "d", "e":
default:
}
你也可以匹配整个区间。
let someValue = 4
switch someValue {
case 0..<10:
case 10...100:
default:
}
你甚至可以使用tuples。这个例子是从文档中改编而来的。
let aPoint = (1, 1)
switch aPoint {
case (0, 0):
// only catches an exact match for first and second
case (_, 0):
// any first, exact second
case (-2...2, -2...2):
// range for first and second
default:
// catches anything else
}
值绑定
有时您可能想要从 switch
值创建一个临时常量或变量。您可以在 case
语句之后立即执行此操作。在使用值绑定的任何地方,它都将与任何值匹配。这类似于在上面的元组示例中使用 _
。以下两个示例修改自文档。
let anotherPoint = (2, 0)
switch anotherPoint {
case (let x, 0):
// can use x here
case (0, let y):
// can use y here
case let (x, y):
// can use x or y here, matches anything so no "default" case is necessary
}
您可以使用where
关键字进一步精确匹配。
let yetAnotherPoint = (1, -1)
switch yetAnotherPoint {
case let (x, y) where x == y:
// executable code
case let (x, y) where x == -y:
// executable code
case let (x, y):
// executable code
}
深入学习
- 此答案旨在提供快速参考。请阅读完整的文档以获取更多信息。这并不难理解。