Swift基础进阶 - 高级运算符的使用
2021-02-18 本文已影响0人
DingGa
溢出运算符
如图,Uint8的最大与最小值是 0 到 255
screenshot.png当我们对该参数进行在最大值和最小值的时候如果超出了这个值,称之为溢出
screenshot.png
但是如果使用 &+
var v:UInt8 = UInt8.max
var v2 = v &+ 1
print("\(v2)")
我们来看下输出结果
0
Uint8 为0到255 超过的话溢出,会自动循环,则向上加1 得到 0
重载运算符
struct point{
var x = 0, y = 0
}
//重载运算符
var p1 = point(x:10,y:20)
var p2 = point(x:15,y:15)
var p3 = p1 + p2;
如果我们想要 P3 为 p1与p2 的 x,y互相加得到的值, 在原本的 + 运算符号是不支持的,这里就需要运算符重载了.
func + (p1:point, p2: point) ->point {
point(x:p1.x + p2.x, y: p1.y + p2.y)
}
这样,我们其实就是将 "+" 运算符进行的重载. 接下来我们看看结果.
point(x: 25, y: 35)
验证成功
Equatable (验证相等)
要想知道两个实例是否等价,一般做法是遵守Equatable 协议,重载 == 运算符,与此同时,等价重载了 != 运算符.
class Person: Equatable {
static func == (lhs: Person, rhs: Person) -> Bool {
lhs.age == rhs.age
}
var age: Int
var name:String
init(age: Int) {
self.age = age
self.name = ""
}
}
//重载运算符
var p1 = Person.init(age: 10)
p1.name = "2"
var p2 = Person.init(age: 10)
p2.name = "3"
print("是否相等 \(p1 == p2)")
我们来看下验证结果
是否相等 true
得出,遵守Equatable ,并进行运算符重载的两个实例对象,判断是否相同唯一标准是重载后的 == 运算符是否是相同的.
注意: Swift会对以下类型默认实现
- 枚举没有关联类型的对象,自动实现 Equatable
- int
3.double 等
Comparable (比较大小)
用于比较两个实例的大小操作
screenshot.png
原理一样,这里不做测试了