我是否应该始终从Swift类中的NSObject继承以避免丢失某些功能

我是否应该始终从Swift类中的NSObject继承以避免丢失某些功能,swift,Swift,我在beta 6上,不确定这是否是一个bug,或者在Swift语言中我应该注意的事情 我有一个在类A中声明的类B对象数组。在类A中,我有一个函数来查看数组中是否存在某个对象。使用contains函数失败,并在下面的示例中出现编译器错误,除非 继承类B中的NSObject。那么这里的问题是什么,我应该总是从NSObject继承吗 class B { .... } class A { var arr: Array<B> = Array<B>() func ch

我在beta 6上,不确定这是否是一个bug,或者在Swift语言中我应该注意的事情

我有一个在类A中声明的类B对象数组。在类A中,我有一个函数来查看数组中是否存在某个对象。使用contains函数失败,并在下面的示例中出现编译器错误,除非 继承类B中的NSObject。那么这里的问题是什么,我应该总是从NSObject继承吗

class B {
  ....
}

class A {
  var arr: Array<B> = Array<B>()

  func check(obj: B) -> Bool {
    return contains(arr, obj)
  }
}
为了可由contains使用,您的类必须实现协议Equatable。当您从NSObject继承时,这是为您实现的。如果你想自己做,你可以做如下事情:

func == (lhs: B, rhs: B) -> Bool {
  return lhs === rhs
}

class B : Equatable {
}
请参见此处有关equalable的更多信息:

为了使您的类可用于包含,您的类必须实现协议equalable。当您从NSObject继承时,这是为您实现的。如果你想自己做,你可以做如下事情:

func == (lhs: B, rhs: B) -> Bool {
  return lhs === rhs
}

class B : Equatable {
}

请参阅此处有关equalable的更多信息:

决定使用标识运算符,而不是使用contains函数;==而且!==感谢tipDecided使用标识运算符而不是使用contains函数;==而且!==谢谢你的提示