本篇目标
掌握 Swift 中的各类运算符,理解条件语句、循环语句和流程控制,能编写带逻辑判断和循环的 Swift 代码。
一、算术运算符
let a = 10
let b = 3
print(a + b) // 13
print(a - b) // 7
print(a * b) // 30
print(a / b) // 3(整数除法)
print(a % b) // 1(取余)浮点数除法:
let x = 10.0
let y = 3.0
print(x / y) // 3.3333333333333335注意:
整数除法会舍去小数部分。
取余
%对负数也有定义,但结果符号与被除数一致。Swift 不允许不同类型直接运算,需要先转换。
二、比较运算符
let a = 10
let b = 3
print(a == b) // false
print(a != b) // true
print(a > b) // true
print(a < b) // false
print(a >= b) // true
print(a <= b) // false用于字符串:
let s1 = "apple"
let s2 = "banana"
print(s1 < s2) // true(按字典序)三、逻辑运算符
let isOpen = true
let isReady = false
print(!isOpen) // false
print(isOpen && isReady) // false
print(isOpen || isReady) // true短路求值:
&&:左边为 false,右边不再计算。||:左边为 true,右边不再计算。
func check() -> Bool {
print("check 被调用")
return true
}
let result = false && check() // check 不会被调用四、赋值运算符
var a = 10
a += 5 // 等价于 a = a + 5,结果 15
a -= 3 // 12
a *= 2 // 24
a /= 4 // 6
a %= 4 // 2注意:
Swift 的赋值表达式不返回值,不能写成
if (a = 10)。复合赋值运算符简化代码。
五、区间运算符
闭区间:... 包含两端。
for i in 1...5 {
print(i) // 1, 2, 3, 4, 5
}半开区间:..< 包含左端,不包含右端。
for i in 1..<5 {
print(i) // 1, 2, 3, 4
}单侧区间:
let array = [1, 2, 3, 4, 5]
for item in array[2...] {
print(item) // 3, 4, 5
}
for item in array[..<3] {
print(item) // 1, 2, 3
}六、三元运算符
let score = 85
let result = score >= 60 ? "及格" : "不及格"
print(result) // 及格嵌套三元(不推荐过度使用):
let grade = score >= 90 ? "A" : score >= 60 ? "B" : "C"七、条件语句
if
let age = 18
if age >= 18 {
print("已成年")
} else {
print("未成年")
}if-else if-else
let score = 85
if score >= 90 {
print("优秀")
} else if score >= 60 {
print("及格")
} else {
print("不及格")
}guard
guard 用于提前退出,常用于函数开头。
func greet(name: String?) {
guard let name = name else {
print("名字为空")
return
}
print("Hello, \(name)")
}与 if 的区别:
guard必须带else,且else中必须退出当前作用域。guard后面的代码可以继续使用解包后的变量。
八、switch
let fruit = "apple"
switch fruit {
case "apple":
print("苹果")
case "banana":
print("香蕉")
default:
print("未知")
}特点:
不需要
break,自动跳出。必须穷举所有情况,或加
default。支持区间、元组、值绑定。
区间匹配:
let score = 85
switch score {
case 90...100:
print("优秀")
case 60..<90:
print("及格")
default:
print("不及格")
}值绑定:
let point = (2, 0)
switch point {
case (let x, 0):
print("在 x 轴上,x = \(x)")
case (0, let y):
print("在 y 轴上,y = \(y)")
default:
print("其他位置")
}where 子句:
let number = 12
switch number {
case let n where n % 2 == 0:
print("偶数")
default:
print("奇数")
}九、循环语句
for-in
for i in 1...5 {
print(i)
}
let names = ["Tom", "Jerry", "Spike"]
for name in names {
print(name)
}遍历字典:
let dict = ["a": 1, "b": 2]
for (key, value) in dict {
print("\(key): \(value)")
}while
var count = 0
while count < 5 {
print(count)
count += 1
}repeat-while
至少执行一次。
var count = 0
repeat {
print(count)
count += 1
} while count < 5break 与 continue
for i in 1...10 {
if i == 5 {
break // 跳出整个循环
}
print(i) // 1, 2, 3, 4
}
for i in 1...5 {
if i == 3 {
continue // 跳过本次循环
}
print(i) // 1, 2, 4, 5
}带标签的循环:
outer: for i in 1...3 {
for j in 1...3 {
if j == 2 {
continue outer
}
print("\(i), \(j)")
}
}十、避坑指南
整数除法会丢精度:需要小数时先转 Double。
switch 必须穷举:否则编译器报错。
guard 的 else 必须退出:return、break、continue、throw 等。
for-in 中不要修改集合:可能导致运行时错误。
三元运算符不要嵌套太深:影响可读性。
逻辑运算符短路:注意副作用函数的调用顺序。
十一、检查清单
[ ] 掌握算术、比较、逻辑运算符
[ ] 能使用赋值和区间运算符
[ ] 会使用 if、guard、switch
[ ] 掌握 for-in、while、repeat-while
[ ] 会使用 break、continue 和带标签循环
[ ] 理解短路求值