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)
    }
  • 相关阅读:
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
    Oracle中如何插入特殊字符: & 和 ' (多种解决方案)
    oracle学习链接
    ORACLE中的游标Cursor总结
    SVN使用教程总结
    SVN使用教程之-分支/标记 合并 subeclipse
    weblogic启动 web应用ssh关闭 nohup命令
    Oracle 学习之:ASCII,CHR函数的作用和用法
    Oracle数据库单表循环提取输出
    设计模式-七大原则
  • 原文地址:https://www.cnblogs.com/xwoder/p/4744368.html
Copyright © 2011-2022 走看看