在 Swift 中,switch 语句是一个非常强大的控制流语句,比 C / Java / Objective-C 中的 switch 更加灵活和安全。它不仅支持整数、字符串,还支持枚举、元组、模式匹配等。
1、基本语法
let number = 2
switch number {
case 1:
print("一")
case 2:
print("二")
case 3:
print("三")
default:
print("其他")
}
与 C/Java 不同,Swift 的 switch 不需要写 break,每个 case 默认就是“只执行当前分支,不会贯穿”。
2、区间匹配
switch 可以直接匹配区间,非常适合数值判断:
let score = 87
switch score {
case 90...100:
print("优秀")
case 80..<90:
print("良好")
case 60..<80:
print("及格")
default:
print("不及格")
}
3、多个值匹配
可以在一个 case 中写多个匹配条件,用 , 分隔:
let character: Character = "a"
switch character {
case "a", "e", "i", "o", "u":
print("元音字母")
default:
print("辅音字母")
}
4、元组匹配
switch 可以匹配元组,很常见于坐标:
let point = (1, 0)
switch point {
case (0, 0):
print("原点")
case (_, 0):
print("在 X 轴上")
case (0, _):
print("在 Y 轴上")
case (-2...2, -2...2):
print("在 (-2,2) 的方形内")
default:
print("在其他位置")
}
_ 表示“忽略”。
5、值绑定(let / var)
可以把匹配到的值绑定出来:
let point = (3, 2)
switch point {
case (let x, 0):
print("在 X 轴上,x = \(x)")
case (0, let y):
print("在 Y 轴上,y = \(y)")
case let (x, y):
print("坐标 (\(x), \(y))")
}
6、where 条件
配合 where 可以增加额外条件:
let point = (1, -1)
switch point {
case let (x, y) where x == y:
print("在直线 y = x 上")
case let (x, y) where x == -y:
print("在直线 y = -x 上")
default:
print("普通点")
}
7、枚举匹配
对枚举特别友好,常用在 enum + associated values(关联值)上:
enum Trade {
case buy(stock: String, amount: Int)
case sell(stock: String, amount: Int)
}
let trade = Trade.buy(stock: "AAPL", amount: 100)
switch trade {
case .buy(let stock, let amount):
print("买入 \(amount) 股 \(stock)")
case .sell(let stock, let amount):
print("卖出 \(amount) 股 \(stock)")
}
8、fallthrough
如果想像 C 那样“贯穿到下一个 case”,要显式写 fallthrough:
let number = 1
switch number {
case 1:
print("一")
fallthrough
case 2:
print("二")
default:
break
}
总结
Swift 的 switch 语句比传统语言强大很多,支持:
1、自动 break
2、区间 / 多值匹配
3、元组 / 枚举模式匹配
4、值绑定和 where 条件
相关文章
1、Swift用于switch语句的@unknown:https://fangjunyu.com/2025/03/29/swift%e7%94%a8%e4%ba%8eswitch%e8%af%ad%e5%8f%a5%e7%9a%84unknown/