Swift运算符重载

作者: 大兵布莱恩特 | 来源:发表于2017-04-28 00:16 被阅读96次

    我们在开发中经常用到的运算符有 + , - ,*, /,+=,-=,>,<,>=,<= == 等这些,用于计算或者条件判断, String,Array 可以通过 + 运算符进行操作,那么我们能自己定义一个类或者结构体也支持运算符的操作吗?

       
            let array = ["a","b"]
            let array2 = ["c","d"]
    
            let str2 = "hello"
            let str3 = "world"
            let str4 = str2+str3
            
            print(array+array2) // ["a", "b", "c", "d"]
            
            print(str4) // helloworld
    
    

    首先我定义一个 结构体 Point ,它有 x,y 两个属性代表 x 轴和 y 轴

        
    struct Point {
        var x : Double
        var y : Double
        init(x:Double,y:Double) {
            self.x = x
            self.y = y
        }
    }
    
    
    

    重载 + 号运算符

    let p1 = Point(x: 100.0, y: 100.0)
    let p2 = Point(x: 200.0, y: 50.0)
    func + (p1:Point,p2:Point) -> Point {
        return Point(x: p1.x+p2.x, y: p1.y+p2.y)
    }
    
    let p3 = p1 + p2
    
    p3 = Point(x: 300.0, y: 150.0)
    
    

    重载 - 号运算符

     let p1 = Point(x: 100.0, y: 100.0)
     let p2 = Point(x: 200.0, y: 50.0)
    
     func - (p1:Point,p2:Point) -> Point {
        return Point(x: p1.x-p2.x, y: p1.y-p2.y)
     }
    
    p1 - p2 = (-100,50.0)
    
    
    

    重载 * 号运算符

     let p1 = Point(x: 100.0, y: 100.0)
     let p2 = Point(x: 200.0, y: 50.0)
    
     func * (p1:Point,p2:Point) -> Double  {
        return p1.x*p2.x+p2.y*p1.y
     }
    p1 - p2 = (-100,50.0)
    
    

    重载 == 运算符

    func == (left : Point,right : Point) -> Bool {
        return left.x==right.x&&left.y==right.y
    }
    p1 == p2
    
    

    重载!=号运算符

    func != (left: Point,right: Point) -> Bool {
        return !(left==right)
    }
    p1 != p2
    

    重载<号运算符

    func < (left: Point , right: Point) -> Bool {
        if left.x != right.x {return left.x<right.x}
        if left.y != right.y {return left.y<right.y}
        return false
    }
    

    <= 运算符

    func <= (left: Point,right: Point) -> Bool {
        return left<right || left == right
    }
    

    实战应用
    首先声明两个栈 MyStack, 栈是一种数据结构遵循先进后出的设计,在这里可以看做是一个可以存放字符串元素的数组

    WX20170427-233951@2x.png

    然后我在栈内部重载了加号运算符 使传入的 A B 两个栈里边元素进行相加

    WX20170427-233458@2x.png

    关于 MyStack 是如何实现栈的功能的,请看我之前写的数据结构之栈的文章并附有代码地址,这里只介绍如何通过重载 +号运算符实现两个栈元素相加 并返回一个新的栈

    相关链接
    [数据结构之栈] (http://www.jianshu.com/p/d1aa0eba9d0e)

    加群一起学 Swift,分享学习资料 电子书(瞄神 swift100tip,swift3.0官方教程)

    WechatIMG20.jpeg

    相关文章

      网友评论

        本文标题:Swift运算符重载

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