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)
    }
  • 相关阅读:
    Why Visual Studio Team System Isn't A LoadRunner Killer[转载]
    从键盘判断电脑主人
    LoadRunner中添加weblogic监视器(JMX)
    winrunner事务概念的代码应用(毫秒级)
    Delphi中的线程类
    换工作时如何提高自身的待遇(转贴)
    牛人是怎样用函数实现本地化测试的
    肯德基的见闻
    由 12306.cn 谈谈网站性能技术
    20个优秀的 CSS 网格系统(CSS Grid Systems)推荐
  • 原文地址:https://www.cnblogs.com/xwoder/p/4744368.html
Copyright © 2011-2022 走看看