如何解决“二进制运算符'=='不能应用于两个'Foo'操作数”的问题?

spa*_*ron 2 ios swift swift3

我创建了一个Foo类,如下所示:

class Foo{

    var randomeVar:String?

    func saySomething(){
        print("Something")
    }
}
Run Code Online (Sandbox Code Playgroud)

我现在要比较foo的不同实例,如下所示:

let foo1 = Foo()
let foo2 = Foo()
if foo1 == foo2{
    print("Cool")
}
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,投诉人抱怨“二进制运算符'=='不能应用于两个'Foo'操作数”。有什么问题,我该如何解决?

Kni*_*gon 5

Foo没有父类具有执行比较的任何属性,因此它不知道如何进行自身比较。

相反,您需要采用Equatable协议,该协议将告诉您包括==运算符,此时您将定义操作:

您的另一个选择是使用===,它将比较引用,因此传递的唯一方法是两个项目都指向同一实例。

class Foo : Equatable{

    var randomeVar:String?

    func saySomething(){
        print("Something")
    }

    static func ==(lhs: Foo, rhs: Foo) -> Bool
    {
      //what makes us equal
    }
}
Run Code Online (Sandbox Code Playgroud)

  • func ==应该是静态的。如果要创建一个类“ Equatable”,请添加“ hashValue”方法并使类“ Hashable”。然后,您可以将`Foo`实例放入需要`Hashable`的字典和其他集合中。 (2认同)