如何解决“二进制运算符==”不能应用于两个“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