Ok, etwas Seltsames geschieht, wenn Ihr eigenes Schreiben Gleichheitsoperator für NSObject Subklassen in Swift 2.0 wie folgt aus:Fehler mit Gleichheitsoperator und NSObjects in Swift 2.0?
func ==(lhs: MyObject, rhs: MyObject) -> Bool {
return lhs.identifier == rhs.identifier
}
Für eine Klasse, die wie folgt aussieht:
class MyObject: NSObject {
let identifier: String
init(identifier: String) {
self.identifier = identifier
}
}
Diese verwendet nur arbeiten gut in Swift 1.2 und darunter. Es funktioniert immer noch Art von:
let myObject1 = MyObject(identifier: "A")
let myObject2 = MyObject(identifier: "A")
let result = (myObject1 == myObject2)
// result is true
So weit so gut, aber was ist, wenn beide der Variablen Optionals waren?
let myObject1: MyObject? = MyObject(identifier: "A")
let myObject2: MyObject? = MyObject(identifier: "A")
let result = (myObject1 == myObject2)
// result is false, equals operator was never even called
Und eine andere Sache, die nicht mehr funktioniert:
let myObject1 = MyObject(identifier: "A")
let myObject2 = MyObject(identifier: "A")
let result = (myObject1 == myObject2)
// result is true
let result = (myObject1 != myObject2)
// result is true, equals operator was never even called
So offenbar = keine Anrufe mehr den Operator == und negiert es. Es scheint nur die Instanzen stattdessen zu vergleichen, wenn Sie verwenden! =
All dies geschieht nur, wenn Ihre Klasse eine Unterklasse von NSObject (direkt oder indirekt) ist. Wenn das nicht der Fall ist, funktioniert alles so, wie Sie es erwarten würden.
Kann mir jemand sagen, ob dies ein neues "Feature" in Swift 2.0 oder nur ein böser Bug ist?
Meinten Sie schreiben '==', statt '=', in der '==' Funktion? Könnte die Ursache für das seltsame Verhalten sein, das habe ich allerdings nicht getestet. – ABakerSmith
Leider ist das nicht die Ursache (siehe meine Antwort unten), aber Sie haben Recht, es sollte '==' – Qbyte
Sorry, Tippfehler sein. Aber das war tatsächlich nicht mein Problem. –