Swift 运算符:从入门到精通的实用指南
在学习 Swift 编程语言的过程中,运算符是绕不开的基础知识点。它就像代码中的“工具箱”,负责完成各种数据处理任务。无论是简单的加减乘除,还是复杂的逻辑判断,都离不开运算符的支持。对于初学者来说,掌握这些运算符不仅能提升编码效率,还能帮助你更深入理解 Swift 的语法设计哲学。
本文将带你系统梳理 Swift 中常见的运算符类型,结合真实代码示例,逐步讲解它们的用法、注意事项和常见陷阱。无论你是刚接触编程的新手,还是有一定经验的中级开发者,都能在这篇文章中找到实用价值。
算术运算符:让数字“动”起来
算术运算符是最基础、最常用的运算符类型,用于对数值进行数学计算。Swift 提供了标准的加减乘除操作,支持整数和浮点数类型。
let a = 10
let b = 3
let sum = a + b // 结果为 13,加法
let difference = a - b // 结果为 7,减法
let product = a * b // 结果为 30,乘法
let quotient = a / b // 结果为 3,整数除法(结果向下取整)
let remainder = a % b // 结果为 1,取余运算
⚠️ 注意:在整数类型中,
/运算符会自动进行向下取整(floor division),不会保留小数部分。如果你想得到浮点结果,需将操作数转为Double或Float。
let floatQuotient = Double(a) / Double(b) // 结果为 3.333...
小贴士:取余运算 % 在日常开发中非常实用,常用于判断奇偶性或实现循环索引。比如判断一个数是否为偶数:
let number = 8
if number % 2 == 0 {
print("这是一个偶数")
} else {
print("这是一个奇数")
}
赋值运算符:给变量“上色”
赋值运算符 = 是最基础的运算符之一,用于将右侧的值赋给左侧的变量或常量。Swift 的赋值运算符与大多数语言类似,但其设计更注重安全性和可读性。
var counter = 0
counter = 10 // 将 10 赋给 counter
counter = counter + 1 // 等价于 counter += 1
Swift 还支持复合赋值运算符,可以简化常见的操作:
| 运算符 | 作用 | 示例 |
|---|---|---|
+= |
相加后赋值 | a += 5 等价于 a = a + 5 |
-= |
相减后赋值 | a -= 3 等价于 a = a - 3 |
*= |
相乘后赋值 | a *= 2 等价于 a = a * 2 |
/= |
相除后赋值 | a /= 4 等价于 a = a / 4 |
%= |
取余后赋值 | a %= 3 等价于 a = a % 3 |
var score = 50
score += 10 // score 现在是 60
score *= 2 // score 现在是 120
这类运算符不仅代码更简洁,也减少了重复书写变量名的错误风险。
比较运算符:判断“谁大谁小”
比较运算符用于比较两个值的大小或相等性,结果总是布尔类型(Bool),即 true 或 false。它们在条件语句(如 if、while)中扮演核心角色。
let x = 5
let y = 8
x == y // false,判断是否相等
x != y // true,判断是否不相等
x < y // true,判断是否小于
x > y // false,判断是否大于
x <= y // true,判断是否小于等于
x >= y // false,判断是否大于等于
重要提示:在 Swift 中,== 是严格相等判断,它不仅比较值,还要求类型一致。例如:
let intNum = 10
let doubleNum = 10.0
// 下面这行会编译错误!类型不一致
// if intNum == doubleNum { ... }
// 正确做法:显式转换类型
if intNum == Int(doubleNum) {
print("值相等")
}
这体现了 Swift 在类型安全方面的设计哲学:宁可编译时报错,也不让运行时出问题。
逻辑运算符:连接多个条件
当需要组合多个判断条件时,逻辑运算符就派上用场了。它们能帮助我们构建更复杂的判断逻辑。
Swift 提供三种逻辑运算符:
&&:逻辑与(AND),两个条件都为真时结果才为真||:逻辑或(OR),只要一个条件为真,结果就为真!:逻辑非(NOT),对布尔值取反
let isStudent = true
let hasPayment = false
// 逻辑与:必须是学生且已支付
if isStudent && hasPayment {
print("可以参加课程")
} else {
print("请先完成注册")
}
// 逻辑或:只要满足其中一个条件
if isStudent || hasPayment {
print("至少满足一个条件")
}
// 逻辑非:取反
if !hasPayment {
print("尚未支付,请尽快完成")
}
场景应用:在登录验证中,常需判断用户名和密码是否都非空:
let username = "admin"
let password = "123456"
if !username.isEmpty && !password.isEmpty {
print("登录信息完整,正在验证...")
}
三元条件运算符:简洁的条件表达式
三元条件运算符 ? : 是 Swift 中一种非常紧凑的条件写法,特别适合在一行中根据条件返回不同值。
语法结构:条件 ? 表达式1 : 表达式2
let age = 18
let status = age >= 18 ? "成年人" : "未成年人"
print(status) // 输出:成年人
这个写法等价于:
var status: String
if age >= 18 {
status = "成年人"
} else {
status = "未成年人"
}
优势:代码更紧凑,可读性高,尤其适合赋值场景。但要注意,不要过度使用,否则反而降低可读性。
// 合理使用:状态判断
let level = score >= 90 ? "优秀" : score >= 60 ? "及格" : "不及格"
⚠️ 三元运算符支持嵌套,但嵌套过深会增加理解成本。建议不超过两层。
运算符优先级与结合性:别让“顺序”搞错
在复杂的表达式中,运算符的执行顺序至关重要。Swift 遵循标准的数学优先级规则:
- 括号
()优先级最高 - 乘除取余
* / %优先级次之 - 加减
+ -优先级较低 - 比较运算符
== != < > <= >=优先级更低 - 逻辑与
&&优先级低于比较 - 逻辑或
||优先级最低
let result = 10 + 5 * 2 // 结果为 20,因为 * 优先级高于 +
let result2 = (10 + 5) * 2 // 结果为 30,括号改变顺序
结合性:大多数运算符是左结合的,即从左到右执行。例如:
let a = 10
let b = 5
let c = 2
let expr = a - b - c // 等价于 (a - b) - c = 3
但 = 赋值运算符是右结合的,这确保了链式赋值的正确性:
var x = 0, y = 0, z = 0
x = y = z = 10 // 从右到左赋值,最终三个变量都为 10
实际案例:用 Swift 运算符实现成绩评级系统
让我们综合运用多种运算符,构建一个简单的成绩评级系统:
func getGrade(score: Double) -> String {
// 判断分数是否合法
if score < 0 || score > 100 {
return "无效分数"
}
// 使用三元运算符判断等级
return score >= 90 ? "A"
: score >= 80 ? "B"
: score >= 70 ? "C"
: score >= 60 ? "D"
: "F"
}
// 测试用例
let testScores = [95.5, 87.0, 72.3, 59.9, 105.0, -5.0]
for score in testScores {
print("分数 \(score): 等级是 \(getGrade(score: score))")
}
输出结果:
分数 95.5: 等级是 A
分数 87.0: 等级是 B
分数 72.3: 等级是 C
分数 59.9: 等级是 F
分数 105.0: 等级是 无效分数
分数 -5.0: 等级是 无效分数
这个例子展示了如何将算术、比较、逻辑和三元运算符融合使用,构建出一个实用的小功能。这也是 Swift 运算符在真实项目中的典型应用场景。
总结与建议
Swift 运算符虽然看似简单,却是构建复杂逻辑的基础。掌握它们不仅能提升编码效率,还能让你的代码更清晰、更安全。从算术到逻辑,从赋值到条件判断,每一种运算符都有其特定用途和最佳实践。
建议你在学习过程中:
- 多写小练习,比如实现计算器、判断闰年等;
- 注意类型一致性,避免隐式转换带来的错误;
- 合理使用括号,明确运算顺序;
- 优先使用复合赋值和三元运算符,提升代码简洁性。
随着你对 Swift 运算符的理解加深,你会发现它们就像积木一样,可以组合出无限可能的逻辑结构。编程的本质,正是由这些基础构件搭建而成的。