当前位置: 首页 > news >正文

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

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

  • 闭区间:用 a...b 表示,包含 ab
  • 半开区间:用 a..<b 表示,包含 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.2if 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.2guard (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 = 67switch age {
case ..<13:print("儿童")
case 13..<20:print("青少年")
case 20..<65:print("成年人")
case 65...:print("老年人")
default:break
}
  1. 温度分类:
let temperature = 28switch temperature {
case ..<0:print("极寒")
case 0..<10:print("寒冷")
case 10..<25:print("凉爽")
case 25...35:print("温暖")
case 35...:print("炎热")
default:break
}
  1. 电量状态
let batteryLevel = 18switch batteryLevel {
case ..<20:print("低电量")
case 20..<80:print("正常")
case 80...:print("高电量")
default:break
}

5. Swift Evolution 提案链接

SE-0172

相关文章:

  • 杨洋出席喜临门Ai净眠智能新品发布会 今夜无人失眠
  • 基于Java+Springboot的宠物健康咨询系统
  • tmux-copy mode相关配置文件
  • 小米路由器 AX3000T自定义子网掩码
  • rollupOptions 详细讲解,如何优化性能
  • 07-Seq2Seq英译法案例
  • 模运算优化
  • 用R包mice进行多重插补
  • Git安装全攻略:避坑指南与最佳实践
  • Bugku——WEB篇(持续更新ing)
  • 代理模式 - Flutter中的智能替身,掌控对象访问的每一道关卡!
  • JavaScript中的回调函数详解
  • Springboot 集成 SpringBatch 批处理组件
  • 软件著作权人的权利
  • 【系统分析师】高分论文:论软件开发模型及应用
  • GitHub vs GitLab 全面对比报告(2025版)
  • 大模型小模型选型手册:开源闭源、国内国外全方位对比
  • Vulkan 学习(18)---- 使用 ValidationLayer
  • Function Calling与MCP的区别
  • python训练day44 预训练模型