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)
    }
  • 相关阅读:
    JMeter--聚合报告之 90% Line 正确理解
    jmeter--函数助手对话框之参数详解
    测试理论--如何根据需求设计测试用例
    java jdk 1.6 下载
    linux磁盘满时,如何定位并删除文件
    linux mysql 新增用户 分配权限
    Hibernate 中多对多(many-to-many)关系的查询语句
    springMVC的url-pattern /和/*的区别
    thinkphp多表关联并且分页
    thinkphp 模板里嵌入 php代码
  • 原文地址:https://www.cnblogs.com/xwoder/p/4744368.html
Copyright © 2011-2022 走看看