2016-05-23 7 views
4

У меня есть ошибка в Equatable во время компиляции. Я хотел добавить метод find или contains в список, чтобы проверить значение. мой код НижеРезервное соответствие «Generic» для протокола «Equatable» в Swift 2.2

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?

+3

'NSObject' уже является' Equatable' в Swift2, так что вы можете удалить протокол Объявление: http://stackoverflow.com/a/34515270/14955 – Thilo

ответ

7

Согласно docs, NSObject соответствует Equatable:

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

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

+1

Удалили ошибку, но не проверили с помощью метода Содержит? Выполнение кода, как показано ниже .... if! ReadArray.contains (generic) { читать array.append (generic) } Я что-то делаю здесь? –

+0

http://stackoverflow.com/questions/37391580/swift-2-2-contains-method-not-working ... Добавили еще один звонок –

0

класс наследующий NSObject уже соответствует Equatable. Поэтому объявление Object: Equatable является избыточным.

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^