2016-05-23 8 views
2

Enthält Methode nicht richtig funktioniert und es gibt mir falsches Ergebnis, selbst wenn es mit Objekt übereinstimmt?Swift 2.2, Enthält Methode funktioniert nicht

Mein Code unten

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 
} 

Überprüfung in Viewcontroller

print(readArray.contains(generic)) 
if !readArray.contains(generic) 
{ 
      readArray.append(generic) 
} 
+1

Ihre Klasse erbt von 'NSObject' - Sie müssen daher' isEqual' überschreiben, um Vergleiche zu machen. – Hamish

+0

Mögliches Duplikat von [Bug mit Gleichheitsoperator und NSObjects in Swift 2.0?] (Http://stackoverflow.com/questions/31099379/bug-with-equals-operator-and-nsobjects-in-swift-2-0) – Hamish

+1

'String (" ")' und nur '" "ist genau das gleiche und beachten Sie die Verwendung optionaler Eigenschaften und eines nicht-optionalen Initialisierers. – vadian

Antwort

7

OPTION 1

Der Grund dafür ist, dass Ihre Klasse ist von NSObject vererben, Sie daher, Muss fu LFILL die NSObjectProtocol statt Equatable:

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

OPTION 2

vererben Equatable statt NSObject (man kann wohl diese Option nicht verwenden, da Sie scheinen NSCoding müssen)

+0

Das ist einfach "isEqual" vergleicht die Zeiger - wenn Sie versuchen, zwei verschiedene Instanzen mit dem gleichen 'genericCode' zu ​​vergleichen, wird es nicht funktionieren (versuchen Sie, einen Haltepunkt in der' == 'Überladung zu setzen, es wird nie ausgelöst) . – Hamish

+0

Dank Bob, aktualisierte Antworten funktioniert für mich. –