if 与 else
本教程共 93 篇 · 第 21 篇 · 更新于 2026-08-08 · 约 8 分钟阅读
本节目标:学会用
if、else、else if让程序根据不同条件走不同的路,并能用 if 表达式给常量赋值。
程序大多时候不是一条直线走到底。你会碰到“如果温度低于零度就提醒穿厚衣服,否则就随便穿”的情况。Swift 用 if 和 else 来表达这种二选一、多选一的分支逻辑。它们是你控制程序走向最基础、也最常用的工具。
1-1 条件分支到底是什么
所谓条件分支,就是当某个条件成立时执行一段代码,不成立时执行另一段。这里说的“条件”必须是一个布尔值(Bool 类型),也就是要么 true 要么 false,没有第三种可能。
Swift 里最常见的条件来自比较运算,比如大于、小于、等于。像 age > 18、score == 100 这类表达式算出来的结果就是 Bool。if 后面的括号不是必须的,Swift 习惯把条件直接写在 if 后面,再跟一对花括号。这种写法读起来像一句自然语言:“如果……就……”。
Note很多从 C、Java 转过来的读者会条件反射写
if (x > 0) {}。Swift 里的括号可以省略,写成if x > 0 {}更地道。但花括号不能省,哪怕分支只有一行。初学者常漏掉花括号,结果只有第一句被纳入分支。
1-2 最简单的 if:只处理成立的情况
最基础的 if 只有一个条件。条件为 true 时执行花括号里的内容,为 false 时就跳过,程序继续往下走。
var temperatureInFahrenheit = 30
if temperatureInFahrenheit <= 32 {
print("天太冷了,围巾安排上。")
}
这段代码检查华氏温度是否不高于 32 度(水的冰点)。成立就打印提醒,不成立就什么都不做。注意 if 执行完之后,代码不会卡住,而是顺着花括号后面的语句继续运行。
初学者常在这里踩坑:以为 if 不成立时会发生什么。其实不成立就是“什么也不做”,直接跳过。不要为了对称硬塞一个空的 else。
1-3 if 配 else:二选一
光有 if 还不够。当条件不成立时,你可能想做点别的,于是加上 else 分支。两个分支里必定执行其中一个,不会两个都跑,也不会都不跑。
temperatureInFahrenheit = 40
if temperatureInFahrenheit <= 32 {
print("天太冷了,围巾安排上。")
} else {
print("没那么冷,穿件 T 恤就行。")
}
温度升高到 40 度后,第一个条件不满足,于是走 else 分支。这种“二选一”的结构最常用,比如判断登录成功与否、判断数字正负、判断用户是否已登录等等,本质都是“要么 A 要么 B”。
1-4 else if:处理多个分支
两个分支不够用时,可以在中间插入 else if,形成一条判断链。Swift 从上往下逐个检查,谁先成立就执行谁,后面的不再判断。
temperatureInFahrenheit = 90
if temperatureInFahrenheit <= 32 {
print("天太冷了,围巾安排上。")
} else if temperatureInFahrenheit >= 86 {
print("真暖和,记得涂防晒。")
} else {
print("没那么冷,穿件 T 恤就行。")
}
这里先判断是否够冷,不够冷再判断是否够热,都不是就落到最后的 else。顺序很重要:把最具体的条件放在前面,免得被更宽泛的条件先截走。比如先判断 == 0 再判断 >= 0,否则 == 0 永远没机会命中。
Tip写
else if链时,先判断的范围最好互不重叠。如果前面的条件已经把某段数值包住了,后面的else if永远没机会执行,这种 bug 很难发现,因为编译器不会报错。
1-5 最后的 else 可以省略
else 不是必须的。如果某些情况你确实不需要处理,直接不写 else 即可。
temperatureInFahrenheit = 72
if temperatureInFahrenheit <= 32 {
print("天太冷了,围巾安排上。")
} else if temperatureInFahrenheit >= 86 {
print("真暖和,记得涂防晒。")
}
温度处于中间值时,两个分支都不触发,程序静悄悄地跳过。省略 else 在“只有特定情况才需要处理”时非常自然。写代码要贴合语义,不要为了形式完整而加一个什么都不做的空分支。
1-6 if 表达式:直接给常量赋值
从 Swift 5.9 起,if 还能当作“表达式”使用。也就是说,你可以把 if 整个当作一个值,赋给常量或变量。每个分支只写一个值,不需要重复写赋值语句。
let temperatureInCelsius = 25
let weatherAdvice = if temperatureInCelsius <= 0 {
"天太冷了,围巾安排上。"
} else if temperatureInCelsius >= 30 {
"真暖和,记得涂防晒。"
} else {
"没那么冷,穿件 T 恤就行。"
}
print(weatherAdvice)
这种写法比传统的“先声明变量,再在分支里分别赋值”更紧凑。所有分支返回的值必须是同一类型。如果某个分支返回 nil,编译器无法确定整体类型,需要你显式标注,比如写成 let freezeWarning: String? = if ... { ... } else { nil }。
Warningif 表达式要求每个分支都产出值,且类型一致。不能有的分支返回
String,有的分支什么都不返回。这是它和“语句形式 if”最大的差别。语句形式的 if 允许某个分支没有值,表达式形式不行。
除了赋值,if 表达式也能作为函数的返回值。写法一样:函数返回类型确定后,每个分支直接写要返回的那个值,不必写 return。
1-7 把可选绑定当作条件
if 后面不仅能放布尔表达式,还能直接做可选绑定。最常见的就是判断一个可选值有没有内容,有就解包使用。
let nickname: String? = "小明"
if let name = nickname {
print("昵称是 \(name)")
} else {
print("还没有设置昵称")
}
这里 if let name = nickname 的意思是:如果 nickname 有值,就把它解包赋给 name 并进入分支。可选类型会在后面的章节专门细讲,你现在只要知道 if 后面可以放这种“解包判断”就够了。它和布尔条件本质是两类东西,但都能出现在 if 后面。
1-8 初学者常踩的几个坑
第一,条件必须是布尔值。Swift 不允许拿非布尔量当条件,比如 if score {} 这种写法直接编译不过,你得写 if score != 0 {}。这和某些把非零当真、零当假的语言不同,Swift 要的是明确的布尔。
第二,别把赋值 = 写成比较 ==。if x = 5 在 Swift 里会报错,因为赋值表达式不返回布尔值。这反而帮你少出 bug——很多语言里这个笔误会悄悄变成“永远为真”。
第三,花括号里的代码缩进只是好看,不代表作用域嵌套。作用域由花括号本身决定,哪怕你把代码顶格写,只要在大括号里就仍属于该分支。但建议还是规整缩进,方便人读。
第四,else if 链和多个独立 if 不是一回事。独立 if 每个都会判断一遍,可能多个分支同时执行;else if 链一旦命中就整体结束。想清楚你要的是“可能执行多个”还是“只执行一个”,再决定写法。
掌握好 if 和 else,你就拿到了控制程序走向的第一个工具。下一章我们看 switch,它适合处理分支更多、模式更复杂的判断,写法也更整齐。