Swift 运算符(建议收藏)

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),不会保留小数部分。如果你想得到浮点结果,需将操作数转为 DoubleFloat

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),即 truefalse。它们在条件语句(如 ifwhile)中扮演核心角色。

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 遵循标准的数学优先级规则:

  1. 括号 () 优先级最高
  2. 乘除取余 * / % 优先级次之
  3. 加减 + - 优先级较低
  4. 比较运算符 == != < > <= >= 优先级更低
  5. 逻辑与 && 优先级低于比较
  6. 逻辑或 || 优先级最低
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 运算符的理解加深,你会发现它们就像积木一样,可以组合出无限可能的逻辑结构。编程的本质,正是由这些基础构件搭建而成的。