今天简单说一下操作符重载的相关知识吧,希望对自己和别人能够有所帮助。相信懂得C++的同学对于运算符重载并不陌生,在swift中也是支持重载运算符这种特性的。
操作符重载的好处无需多说,相信大家都明白。那么我们在swift应该如何重载操作符呢?其实很简单,和C++基本一样,只需要添加对应的函数实现就可以了。
例如我们重载加号操作符的话:
但是,和C++中得运算符冲在不同的是,如果要使用新增的运算符的话,还需要在函数重载之前对该操作符进行声明。
上述代码就是声明了一个中位操作符+*,后面就可以添加对应的重载函数实现该运算符的具体操作。
我们先说一下几个关键字的具体作用吧:
- infix/prefix/postfix: 分别用来表示中位操作符、前位操作符和后位操作符。其中infix说明操作符前后都是输入。
associativity:
定义了结合律,即如果多个同类的操作符顺序出现的计算顺序, left,就是说多个操作同时出现时按照从左往右的顺序计算precedence:
运算的优先级,越高的话越优先进行运算。Swift 中乘法和除法的优先级是 150,加法和减法是 140,这里我们定义乘方的优先级为 160,就是说应该早于普通的乘除进行运算。
其中associativity和precedence都是swift的中位运算符的一些属性修饰。如果是前位/后位运算符的话,则不能够实用这些属性来进行修改。
简单地举个prefix的示例:
需要注意的是:
运算符重载函数只能够定义在全局作用域。
附< swift中的常用操作符 >:
Prefix:
++: Increment–: Decrement+ : Unary plus- : Unary minus! : Logical NOT~ : Bitwise NOTPostfix:
++: Increment–: DecrementInfix:
| Exponentiative {precedence 160} | |
|---|---|
| << | Bitwise left shift |
| >> | Bitwise right shift |
| Multiplicative { associativity left precedence 150 } | |
| Multiply | |
| / | Divide |
| % | Remainder |
| & | Multiply, ignoring overflow |
| &/ | Divide, ignoring overflow |
| &% | Remainder, ignoring overflow |
| & | Bitwise AND |
| Additive { associativity left precedence 140 } | |
| + | Add |
| - | Subtract |
| &+ | Add with overflow |
| &- | Subtract with overflow |
| | | Bitwise OR |
| ^ | Bitwise XOR |
| Range { precedence 135 } | |
| ..< | Half-open range |
| … | Closed range |
| Cast { precedence 132 } | |
| is | Type check |
| as | Type cast |
| Comparative { precedence 130 } | |
| < | Less than |
| <= | Less than or equal |
| > | Greater than |
| >= | Greater than or equal |
| == | Equal |
| != | Not equal |
| === | Identical |
| !== | Not identical |
| ~= | Pattern match |
| Conjunctive { associativity left precedence 120 } | |
| && | Logical AND |
| Disjunctive { associativity left precedence 110 } | |
| || | Logical OR |
| Nil Coalescing { associativity right precedence 110 } | |
| ?? | Nil coalescing |
| Ternary Conditional { associativity right precedence 100 } | |
| ?: | Ternary conditional |
| Assignment { associativity right precedence 90 } | |
| = | Assign |
| *= | Multiply and assign |
| /= | Divide and assign |
| %= | Remainder and assign |
| += | Add and assign |
| -= | Subtract and assign |
| <<= | Left bit shift and assign |
| >>= | Right bit shift and assign |
| &= | Bitwise AND and assign |
| ^= | Bitwise XOR and assign |
| |= | Bitwise OR and assign |
| &&= | Logical AND and assign |
| ||= | Logical OR and assign |