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)

用于比较两个值的大小或相等性,返回布尔值(truefalse)。

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 允许开发者通过 prefixinfixpostfix 关键字自定义运算符,但需注意 避免与现有运算符冲突

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 运算符系统的全面认知,并在实际开发中灵活运用这一强大的工具。

最新发布