今天简单说一下操作符重载的相关知识吧,希望对自己和别人能够有所帮助。相信懂得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 |