2016-05-23 85 views
4

我在编译时在Equatable中出现错误。 我想在列表中添加find或contains方法来检查值。 我的代码下面Swift中的'Generic'对协议'Equatable'的冗余一致性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

按照docsNSObject符合Equatable

符合
CVarArgType
CustomDebugStringConvertible
CustomStringConvertible
Equatable
哈希的
NSObjectProtocol

...因此,像你的错误说,符合Equatable是多余的...

+1

已删除错误,但没有与Contains方法检查?做下面的代码.... if!readArray.contains(generic) { readArray.append(generic) }我在这里做了些什么? –

+0

http://stackoverflow.com/questions/37391580/swift-2-2-contains-method-not-working ...已添加另一个电话 –

0

一个类继承NSObject已经符合Equatable。所以宣布Object: Equatable是多余的。

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

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