运算符优先级 #

一、优先级概述 #

运算符优先级决定了表达式中运算的顺序。优先级高的运算符先执行,优先级低的运算符后执行。

1.1 基本示例 #

swift
let result = 2 + 3 * 4
print(result)

let result2 = (2 + 3) * 4
print(result2)

1.2 结合性 #

结合性决定了相同优先级的运算符的计算顺序:

  • 左结合:从左到右计算
  • 右结合:从右到左计算
swift
let a = 4 - 2 - 1
print(a)

let b = 8 / 4 / 2
print(b)

二、运算符优先级表 #

2.1 完整优先级表(从高到低) #

优先级 运算符 描述 结合性
最高 << >> 位移
* / % 乘、除、取余
+ - 加、减
…< … 区间
as is as? as! 类型转换
< <= > >= 比较
== != === !== 相等
&& 逻辑与
|| 逻辑或
?: 三元条件
= *= /= %= += -= 赋值
最低 >> <<= >>= &= |= ^= 复合赋值

2.2 一元运算符优先级 #

一元运算符(如 !-+)优先级高于二元运算符:

swift
let a = -5 + 3
print(a)

let b = !true && false
print(b)

三、算术运算符优先级 #

3.1 乘除优先于加减 #

swift
let result1 = 2 + 3 * 4
let result2 = 2 * 3 + 4
let result3 = 10 - 6 / 2

print(result1)
print(result2)
print(result3)

3.2 使用括号改变顺序 #

swift
let result1 = (2 + 3) * 4
let result2 = 2 * (3 + 4)
let result3 = (10 - 6) / 2

print(result1)
print(result2)
print(result3)

3.3 复杂表达式 #

swift
let result = 2 + 3 * 4 - 6 / 2
print(result)

let result2 = ((2 + 3) * 4 - 6) / 2
print(result2)

四、比较运算符优先级 #

4.1 比较运算符优先级相同 #

swift
let a = 5
let b = 3
let c = 7

let result = a > b && b < c
print(result)

4.2 与算术运算符结合 #

swift
let result = 2 + 3 > 4
print(result)

let result2 = 5 * 2 < 8 + 3
print(result2)

五、逻辑运算符优先级 #

5.1 逻辑非最高 #

swift
let a = true
let b = false

let result = !a && b
print(result)

let result2 = !(a && b)
print(result2)

5.2 逻辑与优先于逻辑或 #

swift
let a = true
let b = false
let c = true

let result = a || b && c
print(result)

let result2 = (a || b) && c
print(result2)

5.3 复杂逻辑表达式 #

swift
let x = true
let y = false
let z = true

let result = !x || y && z
print(result)

let result2 = (!x || y) && z
print(result2)

六、赋值运算符优先级 #

6.1 赋值运算符优先级最低 #

swift
var a = 5
let b = 10

let result = a + b
print(result)

6.2 复合赋值 #

swift
var a = 10

a += 2 * 3
print(a)

a = 10
a *= 2 + 3
print(a)

七、三元运算符 #

7.1 三元运算符优先级 #

swift
let a = 5
let b = 10

let result = a > b ? a : b
print(result)

let result2 = a > 3 ? a + 1 : b - 1
print(result2)

7.2 嵌套三元运算符 #

swift
let score = 85

let grade = score >= 90 ? "A" : score >= 80 ? "B" : score >= 70 ? "C" : "D"
print(grade)

7.3 与其他运算符结合 #

swift
let a = 5
let b = 10

let result = (a > b ? a : b) * 2
print(result)

八、区间运算符 #

8.1 区间运算符优先级 #

swift
let range = 1...5
let array = Array(range)
print(array)

8.2 与其他运算符结合 #

swift
let start = 1
let end = 5

for i in start...end {
    print(i)
}

let sum = (1...5).reduce(0, +)
print(sum)

九、实际应用 #

9.1 复杂表达式 #

swift
let a = 5
let b = 3
let c = 2

let result = a + b * c > 10 && a - b < c || a * c == 10
print(result)

9.2 使用括号提高可读性 #

swift
let a = 5
let b = 3
let c = 2

let result = ((a + (b * c)) > 10) && ((a - b) < c) || ((a * c) == 10)
print(result)

9.3 条件判断 #

swift
let age = 25
let income = 50000
let creditScore = 720

let eligible = age >= 18 && income > 30000 && creditScore >= 700
print(eligible)

let premium = age >= 25 && (income > 75000 || creditScore >= 750)
print(premium)

十、最佳实践 #

10.1 使用括号明确意图 #

swift
let result = a + b * c
let result2 = a + (b * c)

let condition = a > b && b > c
let condition2 = (a > b) && (b > c)

10.2 拆分复杂表达式 #

swift
let a = 5
let b = 3
let c = 2

let isAValid = a > b
let isBValid = b > c
let result = isAValid && isBValid

10.3 避免过度嵌套 #

swift
let score = 85
let grade: String

if score >= 90 {
    grade = "A"
} else if score >= 80 {
    grade = "B"
} else if score >= 70 {
    grade = "C"
} else {
    grade = "D"
}
print(grade)

十一、常见错误 #

11.1 忘记运算符优先级 #

swift
let result = 2 + 3 * 4
print(result)

let expected = (2 + 3) * 4
print(expected)

11.2 逻辑运算符混淆 #

swift
let a = true
let b = false
let c = true

let result1 = a || b && c
let result2 = (a || b) && c

print(result1)
print(result2)

11.3 赋值与比较混淆 #

swift
var a = 5

if a == 10 {
    print("a等于10")
}

十二、总结 #

本章学习了Swift运算符优先级:

  • 优先级:决定运算顺序
  • 结合性:决定相同优先级的计算方向
  • 括号:改变默认优先级

最佳实践:

  • 使用括号明确意图
  • 拆分复杂表达式
  • 避免过度嵌套
  • 保持代码可读性

下一章,我们将学习控制流!

最后更新:2026-03-26