Swift 如何自定义运算符?
Swift 中许多有的运算符,可以方便做一些运算操作。 例如:
- 溢出运算符
&+=
&-=
… - 范围运算符
..<
...
- 空合运算符
??
等等
那么,这些运算符的如何进行定义、优先级大小和结合性如何设置等等,让我们一起来了解一下吧!
如何定义运算符?
1 | /// 前缀 |
运算符的优先级
优先级组
1 | //===----------------------------------------------------------------------===// |
以上是 swift 源码中关于标准优先级组的定义。当然,我们也可以查看官方的文档了解运算符的优先级组。下表展示了优先级由低到高的排列
优先级
优先级(由低到高) | 结合性 | 运算符 |
---|---|---|
AssignmentPrecedence |
right | *= &*= /= %= += &+= -= &-= <<= &<<= >>= &>>= &= ^= |= |
FunctionArrowPrecedence |
right | ~> |
TernaryPrecedence |
right | ?: |
DefaultPrecedence |
none | |
LogicalDisjunctionPrecedence |
left | || |
LogicalConjunctionPrecedence |
left | && |
ComparisonPrecedence |
none | < <= > >= == != === !== ~= |
NilCoalescingPrecedence |
right | ?? |
CastingPrecedence |
none | is as as! as? |
RangeFormationPrecedence |
none | ... ..< |
AdditionPrecedence |
left | + &+ - &- | ^ |
MultiplicationPrecedence |
left | * &* / % & |
BitwiseShiftPrecedence |
none | << &<< >> &>> |
- 中缀运算符默认的优先级别为
DefaultPrecedence
。 - 中缀运算符默认的结合性为
none
。 DefaultPrecedence
的优先级高于TernaryPrecedence
。
如何自定义运算符?
1 | // 1 |
- 定义优先级组
PowerPrecedence
,设置结合性为left
,优先级大于MultiplicationPrecedence
- 定义运算符
**
,设置优先级别为PowerPrecedence
- 扩展
Int
,添加**
运算。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 uuuuuli!
Comments
GitalkDisqus