美文网首页
运算符重载和自定义

运算符重载和自定义

作者: merlinCry | 来源:发表于2018-07-24 11:20 被阅读0次

    一重载

    类和结构体可以为现有的运算符提供自定义的实现。

    注意:这个重载运算符属于类和结构体,所以是static的

    struct Vector2D {
        var x = 0.0, y = 0.0
    }
    
    extension Vector2D {
        static func + (left: Vector2D, right: Vector2D) -> Vector2D {
            return Vector2D(x: left.x + right.x, y: left.y + right.y)
        }
    }
    let vector = Vector2D(x: 3.0, y: 1.0)
    let anotherVector = Vector2D(x: 2.0, y: 4.0)
    //两个Vectore2D类型的实例可以相加了
    let combinedVector = vector + anotherVector
    
    运算符分为三种
    1前缀运算符
    只有一个参数,运算符放在参数前面使用  如  &a
    
    2中缀运算符
    有两个参数,运算符放在中间使用   如 a + b
    
    3后缀运算符
     只有一个参数,运算符放在参数后面使用    如  a!
    

    二自定义

    自定义运算符

    在swift中还可以根据需要自定义运算符
    语法: 新的运算符要使用operator 关键字在全局作用域内进行定义,同时还要指定prefix 、infix 或者postfi
    x 修饰符:

    prefix operator +++
    //然后要使用这个运算符的类型,对其进行重载
    extension Vector2D {
        static prefix func +++ (vector: inout Vector2D) -> Vector2D {
            vector += vector
            return vector
        }
    }
    
    var toBeDoubled = Vector2D(x: 1.0, y: 4.0)
    let afterDoubling = +++toBeDoubled
    

    相关文章

      网友评论

          本文标题:运算符重载和自定义

          本文链接:https://www.haomeiwen.com/subject/vvhemftx.html