Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 812
dhaval shah Avatar asked May 23 '16 11:05

dhaval shah


2 Answers

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
}
like image 140
kgaidis Avatar answered Dec 17 '22 00:12

kgaidis


According to the docs, NSObject conforms to Equatable:

Conforms To
CVarArgType
CustomDebugStringConvertible
CustomStringConvertible
Equatable
Hashable
NSObjectProtocol

... therefore, like your error says, conformance to Equatable is redundant...

like image 23
Grimxn Avatar answered Dec 16 '22 23:12

Grimxn