Swift是否支持模式匹配?能否用模式匹配重写给定递归求和函数?
Swift 相关技术问题解答
1. Swift是否支持模式匹配特性
Swift原生支持完整的模式匹配能力,可配合switch、if case、guard case、for case等关键字,实现枚举值匹配、可选值绑定、元组匹配、范围匹配、集合拆分匹配等多种场景的逻辑判断,语法灵活且安全性高。
2. 递归求和函数的模式匹配重写
你提供的求和函数完全可以用模式匹配重写,重写后可以去掉强制解包逻辑,不需要手动判断数组是否为空,编译器会自动校验模式覆盖的穷尽性,代码可读性和安全性都更高,重写后的代码如下:
func sum(_ lst: [Int]) -> Int { switch lst { case []: return 0 case let [first, rest...]: return first + sum(Array(rest)) } }
上述代码中:
- 空数组分支直接匹配空数组模式
[],对应原代码的guard判空分支 - 非空数组分支用
[first, rest...]模式拆分出数组的首元素first和剩余元素组成的切片rest,对应原代码取首元素加剩余数组递归求和的逻辑
内容的提问来源于stack exchange,提问作者Cassandra Trotter
相关产品推荐
相关产品推荐

