Swift 小技巧:用单边区间优雅处理模糊范围

进入正题之前先科普一下 Swift 区间的知识。
Swift 中的区间有两种类型:闭区间和半开区间。

  • 闭区间:用 a...b 表示,包含 ab
  • 半开区间:用 a.. 表示,包含 a 但不包含 b
举个例子

想判断一个数字是否在 0 到 100 之间,通常会这样写:

let number = 50
if number >= 0 && number <= 100 {
    print("在 0 到 100 之间")
}

但是这种写法有点冗长,而且不够优雅。
现在我们可以用区间来简化这个判断。

let number = 50
if (0...100).contains(number) {
    print("在 0 到 100 之间")
}
// or
if (0..<101).contains(number) {
    print("在 0 到 100 之间")
}

现在进入正题 “单边区间(One-sided Range)”

1. 问题背景

需要实现一个简单的评分系统,根据用户评分的数值(如 App Store 中的打分)自动归类为“差评”、“中评”或“好评”。评分是一个浮点数,范围通常在 0 到 5 之间,分类逻辑如下:

  1. 小于 2.0 视为差评
  2. 介于 2.0 到 3.5(不含)之间为中评
  3. 大于等于 3.5 为好评

2. 常规解法

let score = 4.2

if score < 2.0 {
    print("差评")
} else if score >= 2.0 && score < 3.5 {
    print("中评")
} else if score >= 3.5 && score <= 5.0 {
    print("好评")
} else {
    print("评分超出范围")
}

3. 用单边区间优雅处理

let score = 4.2

guard (0.0...5.0).contains(score) else {
    print("非法评分")
    return
}

switch score {
case ..<2.0:
    print("差评")
case 2.0..<3.5:
    print("中评")
case 3.5...:
    print("好评")
default:
    break
}

4. 常见使用场景举例

  1. 年龄分组:
let age = 67

switch age {
case ..<13:
    print("儿童")
case 13..<20:
    print("青少年")
case 20..<65:
    print("成年人")
case 65...:
    print("老年人")
default:
    break
}
  1. 温度分类:
let temperature = 28

switch temperature {
case ..<0:
    print("极寒")
case 0..<10:
    print("寒冷")
case 10..<25:
    print("凉爽")
case 25...35:
    print("温暖")
case 35...:
    print("炎热")
default:
    break
}
  1. 电量状态
let batteryLevel = 18

switch batteryLevel {
case ..<20:
    print("低电量")
case 20..<80:
    print("正常")
case 80...:
    print("高电量")
default:
    break
}

5. Swift Evolution 提案链接

SE-0172

你可能感兴趣的:(Swift,Tips,swift,开发语言,ios)