Swift中的'Generic'对协议'Equatable'的冗余一致性2.2
我在编译时在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的?
按照docs,NSObject
符合Equatable
:
符合
CVarArgType
CustomDebugStringConvertible
CustomStringConvertible
Equatable
哈希的
NSObjectProtocol
...因此,像你的错误说,符合Equatable是多余的...
已删除错误,但没有与Contains方法检查?做下面的代码.... if!readArray.contains(generic) { readArray.append(generic) }我在这里做了些什么? –
http://*.com/questions/37391580/swift-2-2-contains-method-not-working ...已添加另一个电话 –
一个类继承NSObject
已经符合Equatable
。所以宣布Object: Equatable
是多余的。
但是,一致性并不意味着它已被正确实施(NSObject
只是检查指针是否相同)。如果要正确实现Equatable
为NSObject
,只是排除了协议一致性声明(: Equatable
),但仍然实现比较方法:
static func ==(lhs: Object, rhs: Object) -> Bool {
return lhs.text == rhs.text
}
'NSObject'已经'Equatable'在Swift2,这样你就可以删除协议声明:http://*.com/a/34515270/14955 – Thilo