Swift学习20:如何为类和结构体自定义运算符
运算符重载
类和结构体
可以为现有的运算符提供自定义的实现,称为运算符重载
1 | struct Vector2D { |
- 运算符重载
1 | struct Vector2D { |
编译运行,查看打印结果:
1 | x is 4.0,y is 3.0 |
一元运算符的重载
类和结构体
也能提供标准一元运算符
的实现要实现
前缀
或者后缀
运算符,需要在声明运算符函数的时候在func
关键字之前指定prefix
或者postfix
限定符
1 | struct Vector2D { |
编译运行,查看打印结果:
1 | x is -1.0,y is -2.0 |
组合赋值运算符重载
组合赋值运算符将赋值运算符
=
与其他运算符进行结合在实现的时候,需要把运算符的左参数设置成
inout
类型,因为这个参数的值会在运算符函数内直接被修改
1 | extension Vector2D { |
编译运行,查看打印结果:
1 | x is 3.0,y is 5.0 |
等价运算符重载
自定义类和结构体不接收等价运算符的默认实现,也就是所谓的
等于
运算符==
和不等于
运算符!=
要使用等价运算符来检查你自己类型的等价,需要和其他
中缀运算符
一样提供一个等于
运算符重载,并且遵循标准库的Equatable
协议swift
为一下自定义类型提供等价运算符合成实现- 只有遵循
Equatable
协议存储属性的结构体
- 只拥有遵循
Equatable
协议关联类型的枚举
- 没有关联类型的枚举
- 只有遵循
1 | // 等价运算符 |
编译运行,查看打印结果:
1 | false |
自定义中缀运算符的优先级和结合性
自定义的中缀
infix
运算符也可以指定优先级和结合性每一个自定义的中缀运算符都属于一个优先级组
优先级组指定了自定义中缀运算符和其他中缀运算符的关系
- Post title:Swift学习20:如何为类和结构体自定义运算符
- Post author:张建
- Create time:2023-02-23 04:02:46
- Post link:https://redefine.ohevan.com/2023/02/23/Swift课程/Swift学习20:如何为类和结构体自定义运算符/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.