Day5 聚焦 Swift 中的 “条件判断”—— 从基础的 if 语句,到多分支的 else if,再到更优雅的 switch 和简洁的三目运算符。这些是控制代码执行流程的核心,无论是后续 iOS 里的登录验证、VisionPro 中的交互逻辑,都离不开条件判断。整理了今天的实操代码、场景对比和避坑点,新手朋友可以跟着练,感受不同判断方式的适用场景~

目录

一、基础条件判断:if 语句的核心用法

1. 基本判断与字符串比较

2. 实用场景:数组长度检查与默认值处理

二、多条件判断:else 与 else if 的分支处理

三、复合条件:&&(且)与 ||(或)的组合判断

四、更优雅的多分支:switch 语句的优势

1. 枚举的 switch 判断(最推荐场景)

2. 字符串与默认分支 default

3. 特殊需求:fallthrough 继续执行下一分支

五、简洁到极致:三目运算符 ? :

六、Day5 总结:不同条件判断的适用场景

明日计划


一、基础条件判断: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 处理的小场景~

更多推荐