美文网首页
Swift常用协议-Equatable

Swift常用协议-Equatable

作者: 黑色幽默_0d96 | 来源:发表于2023-08-03 15:03 被阅读0次

    Equatable

    对于Swift中大多标准库定义的类型,都是遵循了 协议的
    如String、Int、Dictionary、Array、Set等

    但是对于自定义的类型,如struct, class等,默认是没有实现Equatable;

    public protocol Equatable {
    
        /// Returns a Boolean value indicating whether two values are equal.
        ///
        /// Equality is the inverse of inequality. For any values `a` and `b`,
        /// `a == b` implies that `a != b` is `false`.
        ///
        /// - Parameters:
        ///   - lhs: A value to compare.
        ///   - rhs: Another value to compare.
        static func == (lhs: Self, rhs: Self) -> Bool
    }
    
    extension Equatable {
        public static func != (lhs: Self, rhs: Self) -> Bool
    }
    
    

    通过源码可以发现,Equatable协议,实际上就是定义了一个静态"=="的方法。

    不遵循Equatable协议,怎么使用==比较两个自定义类型的对象?

    如果是我们自定义的类型,如struct Person{},不想遵循这个Equatable协议,那么自己就要在自定义的类型中,去声明并实现static func == (lhs: Self, rhs: Self) -> Bool这个方法
    自定义的class、struct都是这样

    既然自定义的类型可以自己实现==这个方法,为什么还要Equatable协议?

    swift的值类型,如struct、enum,实际上,一旦遵循了Equatable协议,都会提供默认==实现,底层实现规则,则是比较struct内部各成员变量的值是否相等。当然也可以自己重写这个方法。

    不过需要注意的是class不行,class一旦遵循这个协议,必须实现==方法

    同理,!= 也是这样

    相关文章

      网友评论

          本文标题:Swift常用协议-Equatable

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