运算符重载
- 类和结构体可以为现有的运算符提供自定义的实现,成为运算符重载
一元运算符重载
- 类与结构体也能提供标准一元运算符的实现
- 要实现前缀或者后缀运算符,需要在声明运算符函数的时候在func关键字之前指定perfix或者postfix限定符
组合赋值运算符重载
- 组合赋值运算符将赋值运算符(=)与其他运算符进行结合
- 在实现的时候,需要把运算符的左参数设置成inout类型,因为这个参数的值会在运算符函数内直接被修改
等价运算符重载
- 自定义类和结构体不接收等价运算符的默认实现,也就是所谓的“等于”运算符(==)和“不等于”运算符(!=)
- 要使用等价运算符来检查你自己类型的等价,需要和其他中缀运算符一样提供一个“等于”运算符重载,并且遵循标准库Equatable协议
Swift为以下自定义类型提供等价运算符合成实现:
- 只拥有遵循Equatable协议存储属性的结构体
- 只拥有遵循Equatable协议关联类型的枚举
- 没有关联类型的枚举
如何在Swift里定义自己的运算符
自定义运算符
- 除了实现标准运算符,在Swift当中还可以声明和实现自定义运算符(custom operators)
- 新的运算符要在全局作用域内,使用operator关键字进行声明,同时还要指定prefix、infix或者postfix限定符
自定义中缀运算符的优先级和结合性
- 自定义的中缀(infix)运算符也可以指定优先级和结合性
- 每一个自定义的中缀运算符都属于一个优先级组
- 优先级组指定了自定义中缀运算符和其他中缀运算符的关系
//AdditionPrecedence -> 加法优先级
//MultiplicationPrecedence -> 乘法优先级
//更改了*^优先级,再看代码
//下方的MyPrecedence是定义了一个新的优先级, 它的优先级低于加法优先级