运算符(二)
本教程共 93 篇 · 第 14 篇 · 更新于 2026-08-08 · 约 8 分钟阅读
本节目标:读完你能用比较和逻辑运算符写出条件判断,用三元运算符精简二选一,用区间运算符表达一段连续的值。
上一章是算数,这一章的运算符主要干”判断”的活:比大小、拼逻辑、二选一、划范围。它们是你写 if 和各种控制流时的常客。
1-1 比较运算符
比较运算符都返回布尔值(true/false),告诉你”成不成立”:
1 == 1 // true,相等
2 != 1 // true,不等
2 > 1 // true,大于
1 < 2 // true,小于
1 >= 1 // true,大于等于
2 <= 1 // false,小于等于
这组符号和数学里几乎一样,只有”相等”写成 ==、“不等”写成 != 要注意——别忘了 = 是赋值,== 才是比较,这是新手最高频的笔误来源。
1-2 比较运算符去哪用
它们最常被放进条件语句。比如判断名字是不是目标用户:
let name = "世界"
if name == "世界" {
print("你好,世界")
} else {
print("我不认识你")
}
Swift 的比较结果就是 Bool,正好喂给 if。后面学流程控制时,这会成为你的日常写法。
1-3 元组也能比较
如果两个元组类型相同、元素个数相同,可以直接用 <、== 等比较。比较规则是”从左到右逐个比,先分出胜负的那一对决定结果”:
(1, "斑马") < (2, "苹果") // true:第一项 1<2 已定胜负
(3, "苹果") < (3, "鸟") // true:第一项相等,比第二项
(4, "狗") == (4, "狗") // true:全部相等
只要元组里每个元素自身支持该运算符,整体就能比。标准库内置了少于 7 个元素的元组比较;7 个及以上要自己实现。
1-4 逻辑运算符
逻辑运算符操作 Bool 值,有三种:
逻辑非 !a:把 true 变 false、false 变 true。
let allowed = false
if !allowed {
print("拒绝进入")
}
逻辑与 a && b:两边都得是 true,整体才 true。
if enteredDoor && passedScan {
print("欢迎")
}
逻辑或 a || b:只要有一边是 true,整体就 true。
if hasKey || knowsPassword {
print("欢迎")
}
1-5 短路求值很重要
&& 和 || 都有”短路”特性:能定胜负时,后面的就不再算了。
对 &&,只要左边是 false,右边根本不求值——反正结果已定是 false。对 ||,只要左边是 true,右边也不算。
这个特性不只是性能优化,还关乎正确。比如 if list.count > 0 && list[0] > 5,若 list 为空,左边 false,右边的 list[0] 不会被访问,从而避免了越界崩溃。写复杂条件时,把”便宜且易失败”的判断放左边,更安全。
1-6 三元条件运算符
三元运算符是唯一的三元运算符,形式 问题 ? 答案1 : 答案2:问题为 true 取答案1,否则取答案2。
let contentHeight = 40
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? 50 : 20)
// 有表头加 50,结果是 90
它等价于一段 if-else,但能写在一行,适合”二选一算个值”的场景。官方提醒:别贪用,嵌套多个三元会让代码难读。一个就清爽,两个以上建议改回 if-else。
1-7 区间运算符
区间运算符是 Swift 的便利发明,用 ... 和 ..< 表达一段连续值。
闭区间 a...b:从 a 到 b,两端都包含。
for index in 1...5 {
print(index)
}
// 打印 1 2 3 4 5
半开区间 a..<b:含 a 不含 b,常用于从 0 数到数组长度(数组下标从 0 开始):
let names = ["Anna", "Alex", "Brian", "Jack"]
for i in 0..<names.count {
print("第 \(i + 1) 位是 \(names[i])")
}
1-8 单侧区间
区间还能只写一边,表示”延伸到头”。比如取数组从下标 2 到末尾:
for name in names[2...] {
print(name)
}
// Brian、Jack
...2 表示从头到 2,..<2 表示从头到 1(不含 2)。单侧区间也能用在判断”是否包含某值”上:let r = ...5; r.contains(3) 为 true。
Tip写条件时如果逻辑长,适当加括号让意图清楚,哪怕语法上不需要。
if (a && b) || c || d比一堆&&/||挤一起好读。可读性永远优先于少打几个字符。
1-9 条件运算符怎么用
比较和逻辑运算符是 if 等条件判断的食材,用熟它们,流程控制那章会轻松很多。先说比较:== 相等、!= 不等、> < >= <= 大小,返回都是 Bool。最高频笔误是把赋值 = 写成比较——记住单等赋值、双等比较。
元组也能比大小,规则是”从左到右逐个比,先分胜负的那对定结果”。这很方便,但标准库只内置少于 7 个元素的元组比较,更多元素要自己实现,日常里极少遇到,知道有这限制即可。
逻辑运算符 !、&&、|| 拼布尔值。重点理解”短路求值”:&& 左边 false 就不算右边,|| 左边 true 就不算右边。这个特性不只是性能,更关乎正确——if list.count > 0 && list[0] > 5 在空列表时左边 false,右边不会被访问,从而避免越界崩溃。把”便宜且易失败”的判断放左边,更安全。
三元 ? : 适合一行二选一,但别嵌套多个,否则难读。区间 ... 含两端、..< 不含右端,单侧区间能延伸到头。这些是循环和切片的好搭档,下一模块流程控制里会频繁出场。
写复杂逻辑时,适当加括号让意图清楚,哪怕语法上不需要。if (a && b) || c || d 比一堆 &&/|| 挤一起好读。可读性优先于少打字符,这是写条件的老规矩。还有一点:别用 &&/|| 把三四个条件揉成一行巨长表达式。拆成有意义的子条件或加括号,读起来才不费劲。运算符是工具,清晰地使用它,才是真本事。
1-10 补记:更多例子巩固
补几条例子帮助巩固。三元运算符常用于”根据条件选默认值”:let bg = isDark ? "黑" : "白"。逻辑运算组合时,把最可能为 false(对 &&)或最可能为 true(对 ||)的条件放前面,能借助短路尽早结束,既快又安全。区间运算符和 for 循环是绝配:for i in 0..<n 遍历前 n 个下标,比手写 i < n 更不容易越界。
另外提醒,比较运算符也能直接用在 while 等循环条件里,不只是 if。元组比较在写”按多字段排序”的自定义比较时很省事,但要记得标准库只对少于 7 个元素的元组内置比较。把比较、逻辑、三元、区间这四类运算符玩熟,流程控制的代码会写得又短又准。
陷阱再强调一次:别把 = 当 == 用,这是所有语言转换者的最高频错误。Swift 虽能用类型系统拦下不少,但书写习惯才是根本防线。写完条件表达式,扫一眼等号个数,能省一次尴尬的调试。
1-11 小结
比较运算符(==、!=、>、<、>=、<=)返回 Bool,是 if 的食材;元组也能比,按元素从左到右定胜负。逻辑运算符 !、&&、|| 有短路特性,要善用它避免越界。三元 ? : 适合一行二选一。区间 ... 和 ..< 表达连续值,单侧区间可延伸到头。下一章我们专门讲字符串的日常操作:拼接、插值、多行。