美文网首页iOS学习笔记
Swift基础进阶 - 高级运算符的使用

Swift基础进阶 - 高级运算符的使用

作者: DingGa | 来源:发表于2021-02-18 22:52 被阅读0次

    溢出运算符

    如图,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

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

    相关文章

      网友评论

        本文标题:Swift基础进阶 - 高级运算符的使用

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