首页 / Swift 编程语言教程 / if 与 else

Swift 编程语言教程

if 与 else

本教程共 93 篇 · 第 21 篇 · 更新于 2026-08-08 · 约 8 分钟阅读

SwiftSwift 编程语言教程if语句else条件分支布尔条件if表达式可选绑定

本节目标:学会用 ifelseelse if 让程序根据不同条件走不同的路,并能用 if 表达式给常量赋值。

程序大多时候不是一条直线走到底。你会碰到“如果温度低于零度就提醒穿厚衣服,否则就随便穿”的情况。Swift 用 ifelse 来表达这种二选一、多选一的分支逻辑。它们是你控制程序走向最基础、也最常用的工具。

1-1 条件分支到底是什么

所谓条件分支,就是当某个条件成立时执行一段代码,不成立时执行另一段。这里说的“条件”必须是一个布尔值(Bool 类型),也就是要么 true 要么 false,没有第三种可能。

Swift 里最常见的条件来自比较运算,比如大于、小于、等于。像 age > 18score == 100 这类表达式算出来的结果就是 Boolif 后面的括号不是必须的,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 }

Warning

if 表达式要求每个分支都产出值,且类型一致。不能有的分支返回 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 链一旦命中就整体结束。想清楚你要的是“可能执行多个”还是“只执行一个”,再决定写法。

掌握好 ifelse,你就拿到了控制程序走向的第一个工具。下一章我们看 switch,它适合处理分支更多、模式更复杂的判断,写法也更整齐。