Избыточное соответствие «Generic» протоколу «Equatable» в Swift 2.2.

У меня ошибка в 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")
}

}

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

Произошла ошибка. Это потому, что я использую NSCoding и NSobject?


person dhaval shah    schedule 23.05.2016    source источник
comment
NSObject уже Equatable в Swift2, поэтому вы можете удалить объявление протокола: stackoverflow.com/a/34515270/14955   -  person Thilo    schedule 23.05.2016


Ответы (2)


Согласно документы, NSObject соответствует Equatable:

Соответствует
CVarArgType
CustomDebugStringConvertible
CustomStringConvertible
Equatable
Hashable
NSObjectProtocol

... поэтому, как говорит ваша ошибка, соответствие Equatable избыточно...

person Grimxn    schedule 23.05.2016
comment
Устранили ошибку, но не проверяете с помощью метода Contains? Выполнение кода, как показано ниже.... if !readArray.contains(generic) {readArray.append(generic)} Я делаю что-то не так? - person dhaval shah; 23.05.2016
comment
stackoverflow.com/questions/37391580 / ... Добавили еще один вызов - person dhaval shah; 23.05.2016

Класс, наследующий NSObject, уже соответствует Equatable. Так что объявление Object: Equatable излишне.

Однако соответствие не означает, что оно реализовано правильно (NSObject просто проверяет, совпадают ли указатели). Если вы хотите правильно реализовать Equatable для NSObject, просто исключите заявление о соответствии протокола (: Equatable), но по-прежнему реализуйте метод сравнения:

static func ==(lhs: Object, rhs: Object) -> Bool {
   return lhs.text == rhs.text
}
person kgaidis    schedule 21.02.2018
comment
Могу ли я переопределить isEqual() вместо static func == и по-прежнему использовать == для сравнения? - person Eddie; 04.04.2018
comment
@ Эдди, да, проверял на детской площадке. - person kgaidis; 05.04.2018