美文网首页
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