• 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)
    }
  • 相关阅读:
    cookie与session的原理及区别
    jwt原则
    Django rest framework基础 RESTful风格
    vue项目使用整理
    Serializer 字段验证以及序列化
    ModelSerializer 字段验证以及序列化
    Django
    FREE 命令结果完全剖析
    一个一元二次方程求解编程引申的两个知识点(abs和fabs的区别以及浮点数比较相等)
    signed和unsigned之二
  • 原文地址:https://www.cnblogs.com/xwoder/p/4744368.html
Copyright © 2020-2023  润新知