100 Days of Swift 学习笔记:Day5 掌握条件判断,从 if 到 switch 再到三目运算符
Day5 聚焦 Swift 中的 “条件判断”—— 从基础的 if 语句,到多分支的 else if,再到更优雅的 switch 和简洁的三目运算符。这些是控制代码执行流程的核心,无论是后续 iOS 里的登录验证、VisionPro 中的交互逻辑,都离不开条件判断。整理了今天的实操代码、场景对比和避坑点,新手朋友可以跟着练,感受不同判断方式的适用场景~
目录
一、基础条件判断:if 语句的核心用法
if 语句的作用是 “满足条件就执行某段代码”,不仅能判断数字,还能直接比较字符串,甚至检查容器是否为空。
1. 基本判断与字符串比较
// 1. 判断数字条件
let score = 90
if score >= 80 {
print("Good Job!") // 输出 Good Job!
}
// 2. 直接比较字符串(按字母顺序)
let myName = "SunSun"
let frName = "TuoTuo"
if myName > frName {
print("\(myName) is Win!") // 输出 SunSun is Win!(S 在 T 前面,所以 "SunSun" > "TuoTuo")
}
小知识:字符串比较遵循 “字典序”(类似查字典的顺序),比较的是字符的 Unicode 编码,所以大写字母和小写字母会影响结果(比如 "a" > "B",因为小写 a 的编码更大)。
2. 实用场景:数组长度检查与默认值处理
// 练习1:数组元素超过3个时,移除最旧的元素(索引0)
var numbers = [1, 2, 3]
numbers.append(4) // 现在数组有4个元素
if numbers.count > 3 {
numbers.remove(at: 0) // 移除索引0的元素
}
print(numbers) // 输出 [2, 3, 4]
// 练习2:处理空字符串(用户未输入姓名时用默认值)
var userName = "XiaoSun" // 假设用户输入了名字
if userName == "" { // 检查是否为空字符串
userName = "Anonymous"
}
print("Welcome! \(userName)") // 输出 Welcome! XiaoSun
// 更优雅的方式:用 .isEmpty 检查空值
var emptyStr: String = ""
if emptyStr.isEmpty { // 比 == "" 更直观
print("The string is empty!") // 输出 The string is empty!
}
推荐习惯:检查字符串 / 数组是否为空时,优先用 .isEmpty,代码更易读,也能避免一些隐性错误(比如字符串包含空格时,== "" 会判断为非空,但实际可能需要处理)。
二、多条件判断:else 与 else if 的分支处理
当需要判断 “多种情况” 时,else(否则)和 else if(否则如果)能帮我们组织多分支逻辑,避免嵌套过深的 if。
// 1. if + else:二选一逻辑
let age = 17
if age >= 18 {
print("\(age)岁已经成年啦")
} else {
print("\(age)岁你个未成年") // 输出 17岁你个未成年
}
// 2. if + else if + else:多分支逻辑(比如成绩评级)
let examScore = 75
if examScore < 60 {
print("\(examScore)分你个不及格")
} else if examScore <= 80 { // 注意条件顺序,从低到高
print("\(examScore)分请再接再厉") // 输出 75分请再接再厉
} else {
print("\(examScore)分不错继续努力")
}
⚠️ 踩坑提醒:else if 的条件顺序很重要!如果把 examScore <= 80 放在最前面,那么 90 分也会触发这个分支,因为 90 <= 80 是 false 吗?不,90 <= 80 是 false,所以不会。但如果条件是 examScore >= 60 放在前面,就会覆盖后面的判断,一定要按 “范围从小到大” 或 “从大到小” 排序。
三、复合条件:&&(且)与 ||(或)的组合判断
有时需要同时满足多个条件(用 &&),或满足其中一个即可(用 ||),这两个逻辑运算符能让代码更简洁。
// 1. &&(且):两个条件都为真才执行
let temp = 25
if temp > 20 && temp < 30 { // 温度大于20且小于30
print("\(temp)°C is a nice day.") // 输出 25°C is a nice day.
}
// 2. ||(或):满足一个条件就执行
let userAge = 14
let hasParentalConsent = true // 有家长许可
if userAge >= 18 || hasParentalConsent { // 年满18岁,或有家长许可
print("You can buy the game") // 输出 You can buy the game
}
逻辑优先级:&& 比 || 优先级高,复杂条件建议加括号(比如 (a || b) && c),避免逻辑错误。
四、更优雅的多分支:switch 语句的优势
当需要判断 “多个固定值” 时,switch 比一堆 else if 更清晰,尤其适合枚举、整数等场景,Swift 的 switch 还有两个独特优势:必须穷举所有可能、匹配后自动终止。
1. 枚举的 switch 判断(最推荐场景)
enum Weather {
case sun, rain, wind, snow, unknown
}
let todayWeather = Weather.snow
switch todayWeather {
case .sun:
print("It's a good day!")
case .rain:
print("Pack an umbrella.")
case .wind:
print("Wear something warm!")
case .snow:
print("School is canceled!") // 输出 School is canceled!
case .unknown:
print("Our forecast generator is broken!")
}
优势 1:Swift 会检查 switch 是否覆盖了枚举的所有 case,如果漏写一个,会直接报错,避免遗漏判断。
2. 字符串与默认分支 default
对于字符串这种 “值不固定” 的类型,switch 无法穷举,这时用 default 处理 “其他情况”:
let place = "Metropolis"
switch place {
case "Gotham":
print("Welcome to \(place)")
case "Mega-City One":
print("Welcome to \(place)")
case "Wakanda":
print("Welcome to \(place)")
default:
print("Who are you?") // 输出 Who are you?(以上城市都不匹配)
}
注意:default 必须放在最后,且当所有 case 都不匹配时才执行。
3. 特殊需求:fallthrough 继续执行下一分支
默认情况下,switch 匹配到一个 case 后就会终止,如果需要继续执行下一分支,用 fallthrough:
let day = 5
print("My true love gave to me…")
switch day {
case 5:
print("5 golden rings")
fallthrough // 继续执行下一个case
case 4:
print("4 calling birds")
fallthrough
case 3:
print("3 French hens")
fallthrough
case 2:
print("2 turtle doves")
fallthrough
default:
print("A partridge in a pear tree")
}
// 输出结果会包含从5到默认的所有打印内容
小提示:fallthrough 不常用,尽量避免,除非确实需要 “穿透” 效果(比如上面的歌词叠加场景)。
五、简洁到极致:三目运算符 ? :
对于 “条件为真返回 A,否则返回 B” 的简单逻辑,三目运算符能把 if-else 压缩成一行代码,语法是 条件 ? 真结果 : 假结果。
// 1. 基础用法:判断是否能投票
let voterAge = 18
let canVote = voterAge >= 18 ? "Yes" : "No" // 条件为真返回"Yes",否则"No"
print(canVote) // 输出 Yes
// 2. 结合数组判断
let crewNames = ["Jayne", "Kaylee", "Mal"]
let crewCount = crewNames.isEmpty ? "No one" : "\(crewNames.count) people"
print(crewCount) // 输出 3 people
// 3. 枚举判断
enum Theme {
case light, dark
}
let theme = Theme.dark
let background = theme == .dark ? "black" : "white"
print(background) // 输出 black
记忆法:可以用 “WTF” 辅助记忆 ——What(条件)、True(真结果)、False(假结果),顺序刚好对应 条件 ? 真 : 假。
⚠️ 注意:三目运算符只适合简单逻辑,复杂条件用 if-else 更易读,不要为了简洁而牺牲可读性。
六、Day5 总结:不同条件判断的适用场景
| 判断方式 | 适用场景 | 优势 | 注意点 |
|---|---|---|---|
if |
单个条件判断 | 简单直观 | 条件必须是 Bool 类型 |
if-else |
二选一逻辑 | 清晰区分两种情况 | 无 |
if-else if-else |
多个条件范围判断(如分数评级) | 灵活处理范围条件 | 注意条件顺序,避免覆盖 |
switch |
固定值判断(如枚举、特定字符串 / 数字) | 代码整洁,必须穷举避免遗漏 | default 放最后,默认不穿透 |
| 三目运算符 | 简单的二选一赋值 | 简洁,一行搞定 | 不适合复杂逻辑,避免嵌套使用 |
明日计划
Day6 要学 Swift 的 “循环进阶” 和 “函数基础”—— 把今天的条件判断和循环结合起来,比如用 for 循环遍历数组,再用 if 判断元素是否符合条件。有一起打卡的朋友吗?评论区可以分享你用 switch 处理的小场景~
更多推荐


所有评论(0)