Swift 运算符(超详细)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
在编程世界中,运算符(Operator)如同语言的“语法糖”,它们简化了代码的书写,让开发者能够用更直观的方式表达逻辑。Swift 作为一门现代化编程语言,不仅提供了丰富多样的运算符,还允许开发者通过自定义运算符进一步扩展语言的表达能力。本文将从基础到进阶,系统讲解 Swift 运算符的核心概念、使用场景及实战技巧,帮助读者在开发中高效运用这一工具。
一、运算符的分类与基础用法
运算符可以看作是编程语言中的“数学符号”,它们通过特定的符号组合完成数据的计算、比较或逻辑判断。Swift 中的运算符主要分为以下几类:
1. 算术运算符(Arithmetic Operators)
这类运算符用于执行基本的数学运算,包括加法、减法、乘法、除法等。
var a = 10
var 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
比喻:算术运算符就像厨房里的量杯和秤,帮助开发者精准“称量”数值的大小和变化。
2. 比较运算符(Comparison Operators)
用于比较两个值的大小或相等性,返回布尔值(true
或 false
)。
let isGreater = a > b // true
let isEqual = a == b // false
let isNotEqual = a != b // true
3. 赋值运算符(Assignment Operators)
通过 =
将值赋予变量或常量,Swift 还支持 复合赋值运算符(如 +=
),可简化代码:
var count = 5
count += 3 // 等价于 count = count + 3 → count 变为 8
比喻:复合赋值运算符就像给变量加了一个“加速器”,让代码更简洁高效。
二、进阶运算符:逻辑与位操作
1. 逻辑运算符(Logical Operators)
用于组合多个条件或反转布尔值,常见符号包括 &&
(与)、||
(或)、!
(非)。
let hasInternet = true
let isLoggedin = false
let canPost = hasInternet && isLoggedin // false
let canRetry = hasInternet || isLoggedin // true
短路行为:
&&
右侧表达式若为false
,左侧表达式会立即停止执行。||
右侧表达式若为true
,左侧表达式会立即停止执行。
案例:登录验证时,可避免对未登录用户调用 API:
func fetchData() {
if isLoggedin && checkAPIAvailable() {
// 执行网络请求
}
}
2. 位运算符(Bitwise Operators)
通过二进制位操作数据,适用于底层开发或特定算法场景。
- 按位与(
&
):两个位都为1
时结果为1
。 - 按位或(
|
):至少一个位为1
时结果为1
。 - 按位异或(
^
):两个位不同时结果为1
。 - 按位非(
~
):反转所有位。 - 左移(
<<
)和 右移(>>
):移动二进制位。
let x = 5 // 二进制:00000101
let y = 3 // 二进制:00000011
let z = x & y // 00000001 → 1
let shifted = x << 1 // 00001010 → 10
比喻:位运算符如同控制电路的开关,通过二进制位的开合实现复杂逻辑。
三、自定义运算符:扩展语言的表达能力
Swift 允许开发者通过 prefix
、infix
、postfix
关键字自定义运算符,但需注意 避免与现有运算符冲突。
1. 定义与使用
// 定义一个自定义运算符
infix operator **+** : AdditionPrecedence
// 为运算符赋予功能
func **+(left: Int, right: Int) -> Int {
return left + right + 1
}
let result = 2 **+** 3 // 输出 6
2. 注意事项
- 语义清晰:避免使用模糊符号,如
@
或#
,可能引起误解。 - 优先级合理:通过
@precedence
参数设置运算符的优先级,避免意外结果。
四、运算符优先级与结合性
运算符优先级决定了表达式中运算的执行顺序,例如 *
的优先级高于 +
。
运算符类型 | 优先级 | 结合性 | 示例 |
---|---|---|---|
后缀运算符 | 最高 | 右→左 | array[index] |
一元运算符 | 次高 | 右→左 | !isValid |
乘除、取余 | 中高 | 左→右 | 3 * 4 + 5 → 17 |
加减 | 中低 | 左→右 | 3 + 4 * 5 → 23 |
案例:优先级错误可能导致意外结果:
let total = 10 + 5 * 2 // 20(而非 30),因乘法优先级更高
解决方法:使用括号强制优先级:
let total = (10 + 5) * 2 // 30
五、实战案例:计算器应用
通过一个简单的计算器案例,整合运算符的使用:
enum OperatorType {
case add, subtract, multiply, divide
}
func calculate(a: Double, b: Double, op: OperatorType) -> Double {
switch op {
case .add: return a + b
case .subtract: return a - b
case .multiply: return a * b
case .divide:
if b == 0 { return .nan } // 处理除零错误
return a / b
}
}
// 使用示例
let result = calculate(a: 10, b: 5, op: .divide) // 输出 2.0
六、结论
掌握 Swift 运算符是开发者提升代码效率与可读性的关键。从基础的算术运算到自定义运算符的高级用法,每一类运算符都在特定场景中发挥独特作用。建议读者通过实践逐步熟悉运算符的优先级规则,并尝试用自定义运算符优化复杂逻辑。记住,运算符如同编程语言的“语法缩写”,合理使用它们能让代码更简洁、直观,同时避免因优先级问题引发的逻辑错误。
通过本文的讲解,希望读者能建立起对 Swift 运算符系统的全面认知,并在实际开发中灵活运用这一强大的工具。