美文网首页
EquaTable的使用

EquaTable的使用

作者: 孙国立 | 来源:发表于2021-02-19 10:13 被阅读0次

官方文档

先上一下官方文档地址。如果想更深入的去学习和了解的话可以直接访问下面的链接:
官方文档

具体的使用

关于EquaTable的具体使用我就不参照官方呢么正式的说法去说了,我会按照我的理解去说一下EquaTable的一些日常开发中的使用。

  • EquaTable是干嘛用的
    通过单词的含义我们就可以很好的知道它是用来做比较包含判断的。类似于下面的情况
// **比较操作**
let name1 = "xiaoming"
let name2 = "xiaohong"
if name1 == name2  
  print("相同")
else
  print("不同")

//**判断操作**
let nameArray = ["xiaoming", "xiaohong", "zhangsan", "lisi"]
let checkName = "hahaha"
if nameArray.contains(checkName)
  print("存在")
else
 print("不存在")

类似于数组字典等等都默认的具有上面代码中的这些判断功能,而我们自定义Class类却不具备这种判断的功能。如果想要我们自定义的Class类同样的具有这些功能呢EquaTable就派上用场了。

  • EquaTable在自定义类中的具体使用方法
    1. 单个类
      自定义类
      我定义了一个StreeAddress类。类的定义内容如下
class StreeAddress{
    let number : String
    let street : String
    let unit : String?
    
    init(_ number : String , _ street : String , _ unit : String? = nil) {
        self.number = number
        self.street = street
        self.unit = unit
    }
}

此时我们使用上面的这个类创建实例对象的话是没法直接使用==来进行判断和比较的。
StreeAddress类实现Equatable的protocol协议

extension StreeAddress : Equatable{
    static func == (lhs: StreeAddress, rhs: StreeAddress) -> Bool {
        return
            lhs.number == rhs.number &&
            lhs.street == rhs.street &&
            lhs.unit == rhs.unit &&
    }
}

static func == (lhs: Self, rhs: Self) -> Bool这个方法是我们必须要去实现的一个协议,还有一个协议我们也有可能会用到,就是下面这个协议
public static func != (lhs: Self, rhs: Self) -> Bool
其他的一些方法可以自己去查看文档找寻一下。
然后简单的来说一下这个方法是干嘛的吧。就是返回判断的结果的。lhsrhs就是我们做判断的时候左边和右边的参数。而这个方法返回的判断结果是你想要对哪些自定义类中的属性判断的结果的总结果。比方说我只想判断numberstreet的结果是否都相同,呢就不需要添加unit属性的判断结果了。
现在会出现另一个问题如果当前这个类中引入了另一个自定义的类的时候要怎么进行判断呢。

  1. 多个类
    这个类还是使用上面的StreeAddress类进行一些相关的操作
class StreeAddress{
    let number : String
    let street : String
    let unit : String?
    let demo : Demo
    
    init(_ number : String , _ street : String , _ name : String, _ unit : String? = nil) {
        self.number = number
        self.street = street
        self.unit = unit
        self.demo = Demo(name)
    }
}


class Demo{
    let name : String
    
    init(_ name : String = "名字") {
        self.name = name
    }
}

然后实现StreeAddressEquatable协议

extension StreeAddress : Equatable{
    static func == (lhs: StreeAddress, rhs: StreeAddress) -> Bool {
        return
            lhs.number == rhs.number &&
            lhs.street == rhs.street &&
            lhs.unit == rhs.unit &&
            lhs.demo == rhs.demo
    }
}

这个时候会发现lhs.demo == rhs.demo这行代码报错,报错的原因是因为Demo这个自定义类不具备直接判断的方法。因此我们需要继续实现DemoEquatable协议

extension Demo : Equatable{
    static func == (lhs: Demo, rhs: Demo) -> Bool {
        return lhs.name == rhs.name
    }
}

到这里我们就可以很愉快的对自定义的类进行==判断了。
继承自Equatable的一些protocol大家可以自行查看官方文档了解一下

相关文章

  • EquaTable的使用

    官方文档 先上一下官方文档地址。如果想更深入的去学习和了解的话可以直接访问下面的链接:官方文档[https://d...

  • Swift中需要掌握的系统的Protocol

    CustomStringConvertible Equatable BooleanType Comparable ...

  • Swift的Equatable和Comparable的使用

    // Equatable// 要想得知2个实例是否等价,一般做法是遵守Equatable协议,重载:==运算符//...

  • Equatable

    在实现业务逻辑的过程中,比较两个实例是否相等是一个常见的需求。在Objective-C中,基本上所有的实例都是NS...

  • swift4.1更新

    条件一致性 如果数组、字典或者可选类型的元素类型遵循Equatable,这可以做相同的操作 合并Equatable...

  • swift Equatable

    我来了,swift 定义 用于做值类型对比的协议。 适用范围 遵循Equatable的类型都可以使用==或是!=符...

  • 自定义模型相等比较

    1.比较内存地址,直接使用 === 2.自定义比较内容:遵守Equatable协议,实现协议方法 static f...

  • Swift: Hashable和AnyHashable

    首先Hashable是protocol;public protocol Hashable : Equatable ...

  • Hashable 协议学习日记

    public protocol Hashable : _Hashable, Equatable { var has...

  • Swift Hashable 和 Equatable

    Hashable 和 Equatable Swift provides a synthesized impleme...

网友评论

      本文标题:EquaTable的使用

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