Swift switch 语句(保姆级教程)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

在编程的世界中,Swift switch 语句如同一个灵活的导航员,帮助开发者根据不同的条件选择执行路径。无论是判断用户输入、处理状态变化,还是实现复杂的业务逻辑,switch 都是 Swift 语言中不可或缺的控制结构。对于初学者而言,掌握这一工具能显著提升代码的可读性和效率;而中级开发者则可以通过其高级特性(如元组匹配、值绑定)解锁更优雅的解决方案。本文将从基础语法到高级技巧,结合生动的比喻和实战案例,系统解析 Swift switch 语句的核心用法。


基础语法:switch 的核心结构与基本用法

switch 语句的结构可以类比为一个“多岔路口”:根据输入值的类型或范围,程序会选择对应的“出口”执行代码。其基础语法如下:

switch 表达式 {  
    case 值1:  
        // 处理逻辑  
    case 值2, 值3:  
        // 处理多个值  
    default:  
        // 默认情况  
}  

关键点解析

  1. 每个 case 必须以冒号结尾,表示一个分支的开始。
  2. fallthrough 关键字可让代码“穿透”到下一个 case(类似其他语言的 break 的反向操作),但需谨慎使用,否则可能导致意外行为。
  3. default 是可选的,但若不包含它且存在未覆盖的值,编译器会报错。

实例:判断数字的正负

let number = -5  
switch number {  
case 0:  
    print("数字是零")  
case let x where x > 0:  
    print("正数:\(x)")  
case let x where x < 0:  
    print("负数:\(x)")  
default:  
    print("无效输入")  
}  
// 输出:负数:-5  

这里通过 where 条件扩展了 case 的判断能力,类似数学中的“条件分支”。


多条件匹配:合并 case 与区间表达式

Swift 的 switch 支持合并多个 case 条件,例如:

let day = 3  
switch day {  
case 1, 2, 3, 4, 5:  
    print("工作日")  
case 6, 7:  
    print("周末")  
default:  
    print("无效日期")  
}  
// 输出:工作日  

区间匹配的威力

利用区间语法(a...ba..<b),可以高效处理连续值:

let age = 25  
switch age {  
case 0...12:  
    print("儿童")  
case 13...19:  
    print("青少年")  
case 20...65:  
    print("成年人")  
default:  
    print("老年")  
}  
// 输出:成年人  

元组匹配:同时处理多个条件

Swift 允许在 switch 中匹配元组,这就像同时查看多个“导航地图”来决定路径。例如判断坐标象限:

let point = (x: 3, y: -2)  
switch point {  
case (0, 0):  
    print("原点")  
case (_, 0):  
    print("X 轴上")  
case (0, _):  
    print("Y 轴上")  
case let (x, y) where x > 0 && y > 0:  
    print("第一象限")  
case let (x, y) where x < 0 && y > 0:  
    print("第二象限")  
// ...其他象限  
default:  
    print("其他位置")  
}  
// 输出:第四象限  

这里通过 _ 忽略部分值,用 where 进一步筛选,极大简化了多条件判断的代码。


值绑定:从 case 中提取数据

**值绑定(value binding)**允许直接将匹配的值赋给临时变量,例如解析用户输入的年龄:

let input = "25"  
switch input {  
case let ageString where ageString.hasPrefix("A"):  
    print("输入以 A 开头:\(ageString)")  
case let ageString where Int(ageString) != nil:  
    if let age = Int(ageString) {  
        print("年龄:\(age)")  
    }  
default:  
    print("无效输入")  
}  
// 输出:年龄:25  

处理默认情况:避免遗漏的陷阱

default 是 switch 的安全网,但需注意:

  • 若所有可能的值都被覆盖,可以省略 default,但需确保类型为 enum 或有限枚举类型
  • 对于 IntString 等开放类型,必须包含 default,否则编译器会报错。

案例:颜色转换

enum Color { case red, green, blue }  
let color = Color.green  
switch color {  
case .red:  
    print("红色")  
case .green:  
    print("绿色")  
case .blue:  
    print("蓝色")  
// 不需要 default,因为所有枚举值都被覆盖  
}  

与 if-else 的对比:何时选择 switch?

if-else 适合简单的条件分支,而 switch 在以下场景更高效

  • 多值匹配:如 case 1, 2, 3 比多个 if 更简洁。
  • 区间或元组判断:直接通过语法支持,无需手动编写逻辑。
  • 可读性:当条件复杂时,switch 的结构化写法更易维护。

对比案例:判断数字类型

// if-else 写法  
if number == 0 {  
    // ...  
} else if number > 0 {  
    // ...  
} else {  
    // ...  
}  

// switch 写法(更清晰)  
switch number {  
case 0:  
    // ...  
case let x where x > 0:  
    // ...  
default:  
    // ...  
}  

高级技巧:fallthrough 与模式匹配

1. fallthrough:穿透到下一个 case

类似 C 语言的 break 的反向操作,但需谨慎使用,否则可能导致代码逻辑混乱。

let statusCode = 404  
switch statusCode {  
case 200:  
    print("成功")  
case 404:  
    print("未找到")  
    fallthrough // 穿透到 default  
default:  
    print("处理通用错误")  
}  
// 输出:  
// 未找到  
// 处理通用错误  

2. 模式匹配与 where 条件

通过组合 casewhere,可实现复杂的条件判断:

let (x, y) = (5, 5)  
switch (x, y) {  
case let (a, b) where a == b:  
    print("坐标在对角线上")  
case let (a, b) where a + b > 10:  
    print("总和超过 10")  
default:  
    print("其他位置")  
}  
// 输出:坐标在对角线上  

总结:让代码更优雅的 switch 之道

Swift switch 语句的强大之处在于其灵活性与表达力:

  • 基础结构:通过 case 和 default 覆盖所有可能性。
  • 高级特性:元组匹配、值绑定、区间表达式等,让复杂逻辑一目了然。
  • 可读性优先:相比嵌套的 if-else,switch 的结构化写法更易维护。

掌握这些技巧后,开发者可以像指挥家一样,用 Swift switch 语句精准控制代码的执行流,无论是处理用户输入、状态机还是业务规则,都能游刃有余。记住,善用 fallthrough 但避免滥用,始终以清晰的逻辑为先,这样你的代码才能既高效又优雅。

最新发布