如何解决“二进制运算符==”不能应用于两个“Foo”操作数“?
我创build了一个Foo类,如下所示:
class Foo{ var randomeVar:String? func saySomething(){ print("Something") } }
我现在想要比较foo的不同实例,如下所示:
let foo1 = Foo() let foo2 = Foo() if foo1 == foo2{ print("Cool") }
但是当我这样做的时候,符合“Binary operator ==”的投诉不能应用到两个“Foo”操作数上。 有什么问题,我该如何解决?
Foo有没有父类有任何性能比较,所以它不知道如何比较自己。
相反,您需要采用Equatable协议,然后会告诉您要包含==
运算符,在这一点上您将定义您的操作:
你的另一个select是使用===,它将比较引用,所以这将通过唯一的方式是两个项目都指向同一个实例。
class Foo : Equatable{ var randomeVar:String? func saySomething(){ print("Something") } static func ==(lhs: Foo, rhs: Foo) -> Bool { //what makes us equal } }
对象默认情况下不具有可比性。 您将需要编写比较2个对象的方法。 像这样的东西:
func ==(lhs: Foo, rhs: Foo) -> Bool { return lhs.someVar == rhs.someVar }
这定义了==
函数,用于比较2个Foo对象的variablessomeVar
。