Swift 2.2,包含方法不起作用 [英] Swift 2.2, Contains Method not working
本文介绍了Swift 2.2,包含方法不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
包含方法无法正常工作,即使它与Object匹配也给我错误的结果吗?
Contains method not working properly and it is giving me false result even if it is matching with Object?
我的代码在下方
class Generic: NSObject, NSCoding
{
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
}
签入ViewController
print(readArray.contains(generic))
if !readArray.contains(generic)
{
readArray.append(generic)
}
推荐答案
选项1
原因是您的类是从NSObject
继承的,因此,您必须实现NSObjectProtocol
而不是Equatable
:
The reason is that your class is inheriting from NSObject
, therefore, you must fulfill the NSObjectProtocol
instead of Equatable
:
override func isEqual(object: AnyObject?) -> Bool {
if let object = object as? Generic {
return self.genericCode == object.genericCode
}
return false
}
选项2
从Equatable
而不是NSObject
继承(您可能无法使用此选项,因为您似乎需要NSCoding
)
Inherit from Equatable
instead of NSObject
(you probably can't use this option, since you seem to need NSCoding
)
请注意,对于较新版本的Swift,您可能应该使用
选项3:使用Codable
代替NSCodable
Note that with newer versions of Swift you probably should use
OPTION 3: Use Codable
instead of NSCodable
这篇关于Swift 2.2,包含方法不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文