在Swift中,范围匹配通常在switch-case中使用,用于将值与范围进行比较。为此,使用操作符..<(半开范围)和...(闭合范围):
let score = 76 switch score { case 0..<60: print("不及格") case 60..<80: print("及格") case 80...100: print("优秀") default: print("不正确的值") }
特性:
如果在switch中使用不包括值的上限范围(例如,0..<5),而变量等于5,会发生什么?
人们常常认为这样一个case会匹配,但这是错误的:操作符..<不包括上限。示例:
let value = 5 switch value { case 0..<5: print("0-4") case 5: print("五") default: print("其他") } // 输出:"五"
故事
开发者实现了根据范围显示用户分数的功能,使用了闭合范围,右边界超过了可能的最大值。这导致某些值同时落入两个区间,逻辑工作不正常。
故事
应用中使用了带范围的switch-case,其中一个值由于误使用操作符(例如,0...10和11...20,而值10.5未匹配到任何地方)而未包含在任何范围内。这个BUG只在生产环境中被发现。
故事
在服务的代码中,通过范围匹配比较日期,错误地使用了半开范围:结束日期未包含,结果导致正确的区间被剔除,无法在最后一个有效的日子进行预订。