Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 2.2,包含不起作用的方法_Swift_Contains_Equatable - Fatal编程技术网

Swift 2.2,包含不起作用的方法

Swift 2.2,包含不起作用的方法,swift,contains,equatable,Swift,Contains,Equatable,包含的方法工作不正常,即使它与对象匹配,也会给我错误的结果 下面是我的代码 class Generic: NSObject, NSCoding { var genericCode: String? var genericName : String? var genericType : String? var genericImageUrl : String? var genericPhone: String? var orgName : String? overr

包含的方法工作不正常,即使它与对象匹配,也会给我错误的结果

下面是我的代码

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
,而不是
equalable

override func isEqual(object: AnyObject?) -> Bool {
     if let object = object as? Generic {
         return self.genericCode == object.genericCode
     }
     return false
 }
选项2

继承自
equalable
而不是
NSObject
(您可能无法使用此选项,因为您似乎需要
NSCoding

请注意,对于较新版本的Swift,您可能应该使用
选项3:使用
Codable
而不是
NSCodable

您的类继承自
NSObject
——因此您需要重写
isEqual
来进行比较。可能重复
字符串(“”
),而只需
完全相同,并且要注意使用可选属性和非可选初始值设定项。这只是比较指针的
isEqual
——如果您尝试使用相同的
genericCode
比较两个不同的实例,它将不起作用(尝试在
=
重载中放置断点,它将永远不会被触发).XCode 10.1:
重写函数isEqual(u对象:任何?)->Bool