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

Ali*_*Hus 1 swift

我正处于测试版6,不确定这是一个bug还是我应该在Swift语言中小心的东西.

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

class B {
  ....
}

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

  func check(obj: B) -> Bool {
    return contains(arr, obj)
  }
}
Run Code Online (Sandbox Code Playgroud)

小智 7

为了能够被包含,你的类必须实现协议Equatable.当您从NSObject继承时,这是为您实现的.如果你想自己做,你可以这样做:

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

class B : Equatable {
}
Run Code Online (Sandbox Code Playgroud)

有关Equatable的更多信息,请访问:https://developer.apple.com/library/prerelease/ios/documentation/General/Reference/SwiftStandardLibraryReference/Equatable.html