iOS协议:相等 可比

自WWDC 2015以来,iOS一直在朝着面向协议的程序设计方向发展,苹果对此进行了提及,此后苹果为我们引入了不同的协议供我们使用,这使我们的工作更加轻松便捷。在工作期间,我遇到了许多可以使用的iOS协议对于本文中的不同任务,我将讨论其中两个及其用途。 公平可比。

apple引入的Equatable协议为我们提供了检查一个类的两个实例之间相等性的功能,借助于Equatable协议,我们可以使用“ ==”和“!=”运算符。需要比较的类应该符合此协议。下面是它的示例。

假设我们创建了一个结构,名为student

  struct Student {let rollNumber:Int? 让名字:字符串?  init(rollNumber:Int,name:String){self.rollNumber = rollNumber self.name =名称}} 

我们创建了两个学生实例

 让robin:Student = Student(rollNumber:1,name:“ Robin”)let lovekesh:Student = Student(rollNumber:1,name:“ Lovekesh”) 

我们想比较这两个实例

  if(robin == lovekesh){ 
打印(“相同实例”)
}

但是在这种情况下,Xcode将显示错误

因此,编译器无法理解为解决此问题而需要做的事情,我们需要继承并遵循Equatable协议,并遵循Equatable手段来覆盖“ ==”运算符,以下是示例

  struct Student:Equatable { 

静态函数==(lhs:学生,rhs:学生)-> Bool {

如果lhs.rollNumber == rhs.rollNumber {
返回真
}其他{
返回假
}
} let rollNumber:Int?
让名字:字符串? init(rollNumber:Int,name:String){
self.rollNumber = rollNumber
self.name =名称
}
}

现在我们可以比较这两个实例,但是重要的是它们应该基于某些属性是相等的,并且在上面的示例中是使用滚动编号完成的,现在我们可以尝试将这两个实例等价。

  if(robin == lovekesh){ 
打印(“相同卷号”)
}

遵循等价协议后,我们可以在自定义类对象上使用“ ==”和“!=”运算符。

这是iOS提供的另一种协议,它为我们提供了在自定义类对象上使用<<=>=>运算符的功能,它类似于等价协议,即我们需要对其进行遵循并实现其方法,可比协议的另一个重要方面是它是从equatable继承的,因此它也必须覆盖“ ==”运算符,因此我们需要覆盖“ ==”和“ <”运算符。下面是它的示例。

 静态函数 Bool {如果lhs.rollNumber!  <rhs.rollNumber!{ 
返回真
}其他{
返回假
}
}静态功能==(lhs:学生,rhs:学生)-> Bool {
如果lhs.rollNumber == rhs.rollNumber {
返回真
}其他{
返回假
}
}
}

在需要将其符合的结构或类中实现上述两种方法是必需的,一旦我们实现了这些方法,我们就可以轻松比较各个结构或类的实例

关于可比较协议的另一个有趣的事实是,如果我们创建一个使用可比较协议的Student数组,则可以直接在该数组上使用sort函数,而无需提及任何内容。下面是示例

 让robin:Student = Student(rollNumber:1,name:“ Robin”)let lovekesh:Student = Student(rollNumber:0,name:“ Lovekesh”)var studentArr:[Student] = [robin,lovekesh] studentArr.sort( )打印(studentArr) 

在上述方法中,我们可以使用这些协议,请尝试一下。我很快就会提出一些更快速的协议。感谢阅读本文。

Interesting Posts