如何简化多变量与同一区间表达式的比较逻辑?
简化多变量区间比较的几种方案
当然有办法让这段重复的区间检查代码更简洁!我来分享几个实用的思路:
1. 利用原生区间的contains方法
Swift的区间类型本身就自带contains方法,单个变量的区间检查可以直接写成:
(1...5).contains(x)
这完全等价于1 <= x && x <= 5,可读性一下子就上来了。
那你的原代码可以先简化成:
if (1...5).contains(x) && (1...5).contains(y) && (1...5).contains(z) { // 执行代码 }
2. 扩展Comparable类型,封装区间检查逻辑
如果需要频繁做这类区间检查,给所有可比较类型(比如Int、Double等)扩展一个自定义方法会更方便:
extension Comparable { func isBetween(lower: Self, upper: Self) -> Bool { return lower <= self && self <= upper } }
调用的时候就像这样:
x.isBetween(lower: 1, upper: 5)
原代码就变成:
if x.isBetween(lower: 1, upper: 5) && y.isBetween(lower: 1, upper: 5) && z.isBetween(lower: 1, upper: 5) { // 执行代码 }
3. 封装多变量批量检查函数
如果经常需要同时检查多个变量是否在同一个区间里,可以写一个辅助函数来批量处理:
func allAreBetween<T: Comparable>(_ values: T..., lower: T, upper: T) -> Bool { return values.allSatisfy { $0.isBetween(lower: lower, upper: upper) } // 或者用原生contains:return values.allSatisfy { (lower...upper).contains($0) } }
这下调用起来就超级简洁了:
if allAreBetween(x, y, z, lower: 1, upper: 5) { // 执行代码 }
额外提示:半开区间的情况
如果你的需求是半开区间(比如1 <= x < 6),只要把闭区间...换成半开区间..<就行,原生的contains方法同样支持:
(1..<6).contains(x)
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

