自定义运算符
Swift 支持创建自定义运算符。使用 operator 关键字在全局级别声明新运算符。
运算符的结构由三部分定义:操作数放置,优先级和关联性。
- 
prefix,infix和postfix修饰符用于启动自定义操作符声明。prefix和postfix修饰符声明运算符是否必须分别位于其作用的值之前或之后。这样的运算符就像8和3++**一样 ,因为它们只能作用于一个目标。infix声明了一个二元运算符,它作用于它之间的两个值,例如2+3。
- 
首先计算优先级较高的运算符。默认的运算符优先级仅高于 ?…:(Swift 2.x 中的值为 100)。可以在此处找到标准 Swift 运算符的优先级。
- 
关联性定义了相同优先级的运算符之间的运算顺序。左关联运算符从左到右计算(读取顺序与大多数运算符一样),而右关联运算符从右到左计算。 
Version >= 3.0
从 Swift 3.0 开始,可以在优先级组中定义优先级和关联性而不是运算符本身,这样多个运算符可以轻松地共享相同的优先级而无需引用神秘数字。标准优先级组列表如下所示 。
运算符根据计算代码返回值。此代码用作普通函数,其中参数指定输入的类型,return 关键字指定运算符返回的计算值。
这是一个简单指数运算符的定义,因为标准 Swift 没有指数运算符。
import Foundation    
infix operator ** { associativity left precedence 170 }
func ** (num: Double, power: Double) -> Double{
    return pow(num, power)
}
infix 说**算子在两个值之间工作,例如 9**2。因为该函数具有左关联性,所以 3**3**2 计算为 (3**3)**2。170 的优先级高于所有标准的 Swift 操作,这意味着 3+2**4 计算到 19,尽管**的左关联性。
Version >= 3.0
import Foundation 
infix operator **: BitwiseShiftPrecedence
func ** (num: Double, power: Double) -> Double {
    return pow(num, power)
}
在 Swift 3.0 上,我们可以使用内置的优先级组 BitwiseShiftPrecedence 来提供正确的值(与 <<,>> 相同),而不是显式地指定优先级和关联性。
**:不推荐使用递增和递减,将在 Swift 3 中删除。