zoukankan      html  css  js  c++  java
  • Swift运算符函数与自定义运算符

    代码:

    struct Vector2D {
        var x = 0.0, y = 0.0
    }
    
    // vector1 + vector2
    func + (left: Vector2D, right: Vector2D) -> Vector2D {
        return Vector2D(x: left.x + right.x, y: left.y + right.y)
    }
    
    // vector1 - vector2
    func - (left: Vector2D, right: Vector2D) -> Vector2D {
        return Vector2D(x: left.x - right.x, y: left.y - right.y)
    }
    
    // -vector
    prefix func - (vector: Vector2D) -> Vector2D {
        return Vector2D(x: -vector.x, y: -vector.y)
    }
    
    // vector1 += vector2
    func += (inout left: Vector2D, right: Vector2D) {
        left = left + right
    }
    
    // vector1 -= vector2
    func -= (inout left: Vector2D, right: Vector2D) {
        left = left - right
    }
    
    // ++vector1
    prefix func ++ (inout v: Vector2D) -> Vector2D {
        v += Vector2D(x: 1, y: 1)
        return v
    }
    // vector1++
    postfix func ++ (inout v: Vector2D) -> Vector2D {
        v += Vector2D(x: 1, y: 1)
        return v
    }
    
    // --vector
    prefix func -- (inout v: Vector2D) -> Vector2D {
        v += Vector2D(x: 1, y: 1)
        return v
    }
    
    // vector--
    postfix func -- (inout v: Vector2D) -> Vector2D {
        v += Vector2D(x: 1, y: 1)
        return v
    }
    
    // vector1 == vector2
    func == (left: Vector2D, right: Vector2D) -> Bool {
        return (left.x == right.x) && (left.y == right.y)
    }
    
    // vector1 != vector2
    func != (left: Vector2D, right: Vector2D) -> Bool {
        return !(left == right)
    }
    
    // +++vector
    prefix operator +++ {}
    prefix func +++ (inout vector: Vector2D) -> Vector2D {
        vector += vector
        return vector
    }
    
    // vector+++
    postfix operator +++ {}
    postfix func +++ (inout vector: Vector2D) -> Vector2D {
        vector += vector
        return vector
    }
    
    // vector1 +- vector2
    infix operator +- { associativity left precedence 140 }
    func +- (left: Vector2D, right: Vector2D) -> Vector2D {
        return Vector2D(x: left.x + right.x, y: left.y - right.y)
    }
    
    // vector1 -+ vector2
    infix operator -+ { associativity left precedence 140 }
    func -+ (left: Vector2D, right: Vector2D) -> Vector2D {
        return Vector2D(x: left.x - right.x, y: left.y + right.y)
    }
  • 相关阅读:
    数字加密
    大道至简第四章读后感
    输出类中的对象个数
    大道至简第三章读后感
    02java语法基础问题总结
    从命令行接收多个数字并求和输出
    软件工程个人作业03
    第四周学习进度条
    软件工程概论-课后作业2(单元测试)
    第三周学习进度
  • 原文地址:https://www.cnblogs.com/xwoder/p/4744368.html
Copyright © 2011-2022 走看看