Redundant conformance of 'Generic' to protocol 'Equatable' in Swift 2.2

dhaval shah picture dhaval shah · May 23, 2016 · Viewed 7.9k times · Source

I am Having an error in Equatable while compilation. I wanted to add find or contains method in the list to check the value. My Code Below

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")
}

}

func ==(lhs: Generic, rhs: Generic) -> Bool
{
  return lhs.genericCode == rhs.genericCode
}

Error has occured , Is it because i am using NSCoding and NSobject?

Answer

kgaidis picture kgaidis · Feb 21, 2018

A class inheriting NSObject already conforms to Equatable. So declaring Object: Equatable is redundant.

However, the conformance does not mean that it has been implemented properly (NSObject just checks whether the pointers are the same). If you wish to properly implement Equatable for NSObject, just exclude the protocol conformance statement (: Equatable), but still implement the comparison method:

static func ==(lhs: Object, rhs: Object) -> Bool {
   return lhs.text == rhs.text
}