iOS学习笔记

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会对以下类型默认实现
  1. 枚举没有关联类型的对象,自动实现 Equatable
  2. int
    3.double 等

Comparable (比较大小)

用于比较两个实例的大小操作


screenshot.png

原理一样,这里不做测试了

上一篇下一篇

猜你喜欢

热点阅读