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重载或自定义操作符

    重载运算符 在Swift中,类和结构体是可以提供现有运算符的自定义实现,也就是重载现有运算符。三元运算符(a?b:...

  • 每天学一点Swift---- 运算符函数

    一.运算符重载 1. Swift的运算符提供了良好的可扩展性,Swift不仅允许开发者重新定义已有的运算符(运算符...

  • swift 应用

    //swift 暴露 objc 调用 //swift 调用 objc //自定义表达式模式 (重载运算符 ~=,自...

  • Swift - 运算符重载

    一、定义 在Swift的官方文档中运算符重载叫做运算符函数(Operator Functions)。简单来讲主要实...

  • 运算符重载及其他约定

    7.1 重载算术运算符 重载二元算术运算符 重载复合赋值运算符 重载一元运算符 重载比较运算符 等号运算符:‘eq...

  • C++ 部分运算符重载

    可重载的运算符 不可重载的运算符和符号 重载运算符为类的成员函数 重载运算符为友元函数 重载赋值运算符 重载流插入...

  • 2019-07-11 运算符的重载

    运算符的重载 重载运算符 (“::”,“.*”,“.”,“?:”)不能被重载。 重载运算符时,不能改变其本质,如不...

  • Swift重载运算符

    [TOC] Swift重载运算符 运算符重载允许你改变现在的作用在特定在的结构体和类上的已经存在的操作符的工作方式...

  • swift中的运算符重载

    在Swift的官方文档中运算符重载叫做运算符函数(Operator Functions),顾名思义就是对已经有的运...

  • 运算符重载

    一.+号运算符重载 二.<<号运算符重载 三.指针运算符重载(智能指针)

网友评论

    本文标题:Swift运算符重载

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