我们在开发中经常用到的运算符有 + , - ,*, /,+=,-=,>,<,>=,<= == 等这些,用于计算或者条件判断, 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, 栈是一种数据结构遵循先进后出的设计,在这里可以看做是一个可以存放字符串元素的数组
然后我在栈内部重载了加号运算符 使传入的 A B 两个栈里边元素进行相加
WX20170427-233458@2x.png关于 MyStack 是如何实现栈的功能的,请看我之前写的数据结构之栈的文章并附有代码地址,这里只介绍如何通过重载 +号运算符实现两个栈元素相加 并返回一个新的栈
相关链接
[数据结构之栈] (http://www.jianshu.com/p/d1aa0eba9d0e)
加群一起学 Swift,分享学习资料 电子书(瞄神 swift100tip,swift3.0官方教程)
WechatIMG20.jpeg
网友评论