EquaTable的使用

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

####具体的使用
关于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属性的判断结果了。
**现在会出现另一个问题**如果当前这个类中引入了另一个自定义的类的时候要怎么进行判断呢。
2. 多个类
这个类还是使用上面的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大家可以自行查看官方文档了解一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值