美文网首页
swift运算符

swift运算符

作者: 逗留 | 来源:发表于2016-08-11 16:03 被阅读22次

    //=== 和 !==恒等运算符,用来比较地址

    //??操作符,先对可选值进行拆包,如果不为 nil 返回操作符前面的值,如果为空返回后者。

    struct Vecotor {

    var x = 0, y = 0

    }

    //赋值运算符=和三目运算符不能被重载

    //运算符重载

    func - (left: Vecotor, right: Vecotor) -> Vecotor {

    return Vecotor(x: left.x - right.x, y: left.y - right.y)

    }

    //重载复合运算符

    func -= (inout left: Vecotor, right: Vecotor) {

    left = left - right

    }

    //重载一元操作符,需要添加关键字prefix or postfix,prefix是操作符在前, postfix是操作符在后

    prefix func - (vecotor: Vecotor) -> Vecotor {

    return Vecotor(x: -vecotor.x, y: -vecotor.y)

    }

    //自定义操作符,需要使用operator关键字。使用prefix, infix or postfix标记运算符使用的位置。

    prefix operator +++ {}

    prefix func +++ (vecotor: Vecotor) -> Vecotor {

    return Vecotor(x: vecotor.x + 1, y: vecotor.y + 1)

    }

    postfix operator +++ {}

    postfix func +++ (vecotor: Vecotor) -> Vecotor {

    return Vecotor(x: vecotor.x + 2, y: vecotor.y + 2)

    }

    infix operator +++ {}

    func +++ (left: Vecotor, right: Vecotor) -> Vecotor {

    return Vecotor(x: left.x + 3, y: right.y + 3)

    }

    //自定义操作符,可以定义操作符的关联性associativity和优先级precedence。associativity有三个值:left, right, none,默认是none。precedence默认值是:100。

    /*

    结合性        associativity

    可取值范围    left,right和none

    优先级        precedence

    可取值范围    0~255

    系统内置运算符结合性质及优先级

    求幂相关(无结合,优先级160)

    << 按位左移(Bitwise left shift)

    >> 按位右移(Bitwise right shift)

    乘除法相关(左结合,优先级150)

    * 乘

    / 除

    % 求余

    &* 乘法,忽略溢出( Multiply, ignoring overflow)

    &/ 除法,忽略溢出(Divide, ignoring overflow)      🐂  除0得0

    &% 求余, 忽略溢出( Remainder, ignoring overflow)

    & 位与( Bitwise AND)

    加减法相关(左结合, 优先级140)

    + 加

    - 减

    &+ Add with overflow

    &- Subtract with overflow

    | 按位或(Bitwise OR )

    ^ 按位异或(Bitwise XOR)

    Range (无结合,优先级 135)

    .. 半闭值域 Half-closed range

    ... 全闭值域 Closed range

    类型转换 (无结合,优先级 132)

    is 类型检查( type check)

    as 类型转换( type cast)

    <= 小于等于

    >大于

    >= 大于等于

    == 等于

    != 不等

    === 恒等于

    !== 不恒等

    ~= 模式匹配( Pattern match)

    合取( Conjunctive) (左结合,优先级 120)

    && 逻辑与(Logical AND)

    析取(Disjunctive) (左结合,优先级 110)

    || 逻辑或( Logical OR)

    三元条件(Ternary Conditional )(右结合,优先级 100)

    ?: 三元条件 Ternary conditional

    赋值 (Assignment) (右结合, 优先级 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

    */

    infix operator +- {associativity left precedence 140}

    func +-(left: Vecotor, right: Vecotor) -> Vecotor {

    return Vecotor(x: left.x + right.x, y: left.y - right.y)

    }

    //example

    let vecotor1 = Vecotor(x: 10, y: 15)

    let vecotor2 = Vecotor(x: 5, y: 2)

    let result1 = vecotor1 - vecotor2

    result1.x

    result1.y

    let result2 = -result1

    result2.x

    result2.y

    let result3 = result2+++

    result3.x

    result3.y

    let result4 = result3 +- result2

    result4.x

    result4.y

    相关文章

      网友评论

          本文标题:swift运算符

          本文链接:https://www.haomeiwen.com/subject/mnkssttx.html