Swift 2.2中'Generic'与协议'Equatable'的冗余一致性

dha*_*hah 7 protocols swift equatable

编译时我在Equatable中出错.我想在列表中添加find或contains方法来检查值. 我的代码如下

class Generic: NSObject, Equatable, NSCoding //Am Having an error -  Redundant conformance of 'Generic' to protocol 'Equatable'

{

  var genericCode: String?
  var genericName : String?
  var genericType : String?
  var genericImageUrl : String?
  var genericPhone: String?
  var orgName : String?

override init()
{

    self.genericCode = String("")
    self.genericName = String("")
    self.genericType = String("")
    self.genericImageUrl = String("")
    self.genericPhone = String("")
    self.orgName = String("")

}

//Parameterzed Constructor for the Generic
init(genericCode: String , genericName: String , genericPhone: String, genericType: String, genericImageUrl : String)
{
    self.genericCode = genericCode
    self.genericName = genericName
    self.genericType = genericType
    self.genericImageUrl = genericImageUrl
    self.genericPhone = genericPhone

}

required init(coder aDecoder: NSCoder) {
    genericCode = aDecoder.decodeObjectForKey("genericCode") as? String
    genericName = aDecoder.decodeObjectForKey("genericName") as? String
    genericType = aDecoder.decodeObjectForKey("genericType") as? String
    genericPhone = aDecoder.decodeObjectForKey("genericPhone") as? String
}

func encodeWithCoder(aCoder: NSCoder) {
    aCoder.encodeObject(genericCode, forKey: "genericCode")
    aCoder.encodeObject(genericName, forKey: "genericName")
    aCoder.encodeObject(genericType, forKey: "genericType")
    aCoder.encodeObject(genericPhone, forKey: "genericPhone")
}
Run Code Online (Sandbox Code Playgroud)

}

func ==(lhs: Generic, rhs: Generic) -> Bool
{
  return lhs.genericCode == rhs.genericCode
}
Run Code Online (Sandbox Code Playgroud)

错误发生了,是因为我正在使用NSCoding和NSobject吗?

kga*_*dis 17

继承的类NSObject已经符合Equatable.因此声明Object: Equatable是多余的.

但是,一致性并不意味着它已被正确实现(NSObject只是检查指针是否相同).如果你想正确地实现EquatableNSObject,只是排除了协议一致性声明(: Equatable),但仍然实现比较方法:

static func ==(lhs: Object, rhs: Object) -> Bool {
   return lhs.text == rhs.text
}
Run Code Online (Sandbox Code Playgroud)

  • 我可以覆盖 `isEqual()` 而不是 `static func ==` 并且仍然使用 == 进行比较吗? (2认同)

Gri*_*mxn 15

根据文档,NSObject符合Equatable:

符合
CVarArgType
CustomDebugStringConvertible
CustomStringConvertible
Equatable
Hashable
NSObjectProtocol

...因此,正如您的错误所说,与Equatable的一致性是多余的......