发布于 2022-03-05
Swift - 控制流
swift
Swift 支持多种控制流语句,包括条件语句、循环语句和控制转移语句
学习目标
通过本教程,你将学会:
- 掌握条件语句(if、switch)的使用
- 理解各种循环语句(for、while、repeat-while)的区别和用法
- 掌握控制转移语句(break、continue、fallthrough、return、throw)
- 能够使用控制流语句解决实际问题
前置知识
Swift 支持多种控制流语句,包括条件语句、循环语句和控制转移语句。这些语句可以控制代码的执行流程,使程序能够根据不同的条件执行不同的代码路径。
条件语句
if 语句
let age = 20
if age < 18 {
print("未成年人")
} else if age < 30 {
print("年轻人")
} else {
print("中年人")
}switch 语句
Swift 的 switch 语句功能强大,支持多种匹配模式:
let score = 85
var grade: String
switch score {
case 90...100:
grade = "优秀"
case 80..<90:
grade = "良好"
case 70..<80:
grade = "中等"
case 60..<70:
grade = "及格"
case 0..<60:
grade = "不及格"
default:
grade = "无效分数"
}
print("成绩等级:\(grade)")switch 语句还可以匹配多个值:
let character: Character = "a"
switch character {
case "a", "e", "i", "o", "u":
print("这是一个元音字母")
case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z":
print("这是一个辅音字母")
default:
print("这不是字母")
}循环语句
for-in 循环
// 遍历数组
let fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits {
print(fruit)
}
// 遍历区间
for i in 1...5 {
print(i) // 输出:1, 2, 3, 4, 5
}
// 遍历字典
let scores = ["张三": 90, "李四": 85, "王五": 95]
for (name, score) in scores {
print("\(name): \(score)")
}while 循环
var count = 0
while count < 5 {
print(count)
count += 1
}repeat-while 循环
var number = 0
repeat {
print(number)
number += 1
} while number < 5控制转移语句
break 语句
break 语句用于提前退出循环或 switch 语句:
for i in 1...10 {
if i == 5 {
break
}
print(i) // 只输出:1, 2, 3, 4
}continue 语句
continue 语句用于跳过当前循环的剩余代码,继续下一次循环:
for i in 1...10 {
if i % 2 == 0 {
continue
}
print(i) // 只输出奇数:1, 3, 5, 7, 9
}fallthrough 语句
fallthrough 语句用于在 switch 语句中继续执行下一个 case:
let score = 95
var message = ""
switch score {
case 90...100:
message = "优秀"
fallthrough // 继续执行下一个 case
case 80..<90:
message += ",继续保持"
default:
print(message)
}练习
练习 1:条件语句
编写代码实现以下功能:
- 根据年龄判断是否可以投票(18 岁以上可以投票)
- 根据分数判断等级(90-100 优秀,80-89 良好,70-79 中等,60-69 及格,60 以下不及格)
- 判断一个年份是否为闰年
参考答案:
// 1. 投票判断
let age = 20
if age >= 18 {
print("可以投票")
} else {
print("不能投票")
}
// 2. 分数等级判断
let score = 85
switch score {
case 90...100:
print("优秀")
case 80..<90:
print("良好")
case 70..<80:
print("中等")
case 60..<70:
print("及格")
case 0..<60:
print("不及格")
default:
print("无效分数")
}
// 3. 闰年判断
let year = 2024
if (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) {
print("\(year) 年是闰年")
} else {
print("\(year) 年不是闰年")
}练习 2:for 循环
完成以下任务:
- 计算 1 到 100 的和
- 打印 1 到 20 之间的所有偶数
- 遍历字符串数组,找出最长的字符串
参考答案:
// 1. 计算 1 到 100 的和
var sum = 0
for i in 1...100 {
sum += i
}
print("1 到 100 的和是 \(sum)")
// 2. 打印偶数
for i in 1...20 {
if i % 2 == 0 {
print(i)
}
}
// 3. 找出最长的字符串
let words = ["Swift", "Python", "JavaScript", "Go"]
var longestWord = ""
var maxLength = 0
for word in words {
if word.count > maxLength {
maxLength = word.count
longestWord = word
}
}
print("最长的单词是:\(longestWord),长度为 \(maxLength)")练习 3:while 循环
使用 while 循环完成以下任务:
- 计算一个数的阶乘
- 模拟猜数字游戏(随机生成一个 1-100 的数,直到猜对为止)
- 计算斐波那契数列的前 10 个数
参考答案:
// 1. 计算阶乘
let n = 5
var factorial = 1
var i = 1
while i <= n {
factorial *= i
i += 1
}
print("\(n)! = \(factorial)")
// 2. 猜数字(简化版,使用固定数字)
let targetNumber = 42
var guess = 0
var attempts = 0
while guess != targetNumber {
guess = Int.random(in: 1...100)
attempts += 1
}
print("猜对了!数字是 \(targetNumber),用了 \(attempts) 次")
// 3. 斐波那契数列
var a = 0
var b = 1
var count = 0
print("斐波那契数列前10个数:")
while count < 10 {
print(a, terminator: " ")
let next = a + b
a = b
b = next
count += 1
}练习 4:控制转移语句
编写代码使用 break 和 continue:
- 找出 1 到 100 中第一个能被 7 和 13 同时整除的数
- 打印 1 到 50 之间的质数(使用 continue 跳过非质数)
- 使用 switch 和 fallthrough 实现多重条件判断
参考答案:
// 1. 找出第一个能被 7 和 13 同时整除的数
for i in 1...100 {
if i % 7 == 0 && i % 13 == 0 {
print("第一个能被 7 和 13 同时整除的数是:\(i)")
break
}
}
// 2. 打印质数(简化版)
for number in 2...50 {
var isPrime = true
for i in 2..<number {
if number % i == 0 {
isPrime = false
break
}
}
if isPrime {
print(number, terminator: " ")
}
}
// 3. switch 和 fallthrough
let value = 85
switch value {
case 90...100:
print("优秀")
fallthrough
case 80..<100:
print("良好以上")
case 70..<80:
print("中等")
default:
print("其他")
}练习 5:综合练习
编写一个简单的成绩管理系统:
- 创建一个学生成绩数组
- 计算平均分
- 找出最高分和最低分
- 统计各个等级的人数
参考答案:
let scores = [85, 92, 78, 96, 88, 75, 90, 82]
// 计算平均分
var sum = 0
for score in scores {
sum += score
}
let average = Double(sum) / Double(scores.count)
print("平均分:\(average)")
// 找出最高分和最低分
var maxScore = scores[0]
var minScore = scores[0]
for score in scores {
if score > maxScore {
maxScore = score
}
if score < minScore {
minScore = score
}
}
print("最高分:\(maxScore),最低分:\(minScore)")
// 统计各等级人数
var excellent = 0
var good = 0
var medium = 0
var pass = 0
var fail = 0
for score in scores {
switch score {
case 90...100:
excellent += 1
case 80..<90:
good += 1
case 70..<80:
medium += 1
case 60..<70:
pass += 1
default:
fail += 1
}
}
print("优秀:\(excellent)人,良好:\(good)人,中等:\(medium)人,及格:\(pass)人,不及格:\(fail)人")总结
本章介绍了 Swift 中的控制流语句:
- 条件语句:if-else、switch,用于根据条件执行不同代码
- 循环语句:for-in、while、repeat-while,用于重复执行代码
- 控制转移:break、continue、fallthrough,用于改变代码执行流程
控制流是编程的基础,下一章我们将学习 函数,了解如何组织和重用代码。