Ok, qualcosa di strano sta accadendo quando si scrive il proprio uguale operatore sottoclassi NSObject a Swift 2.0 in questo modo:Bug con operatore uguale e NSObjects in Swift 2.0?
func ==(lhs: MyObject, rhs: MyObject) -> Bool {
return lhs.identifier == rhs.identifier
}
Per una classe che assomiglia a questo:
class MyObject: NSObject {
let identifier: String
init(identifier: String) {
self.identifier = identifier
}
}
Ciò usata per funzionare solo bene in Swift 1.2 e sotto. E 'ancora un po' funziona:
let myObject1 = MyObject(identifier: "A")
let myObject2 = MyObject(identifier: "A")
let result = (myObject1 == myObject2)
// result is true
Fin qui tutto bene, ma se entrambe le variabili sono state optional?
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
E un'altra cosa che non funziona più:
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
Quindi, apparentemente, = non chiama più l'operatore == e nega. Sembra semplicemente confrontare le istanze invece quando si utilizza! =
Tutto questo accade solo quando la classe è una sottoclasse di NSObject (direttamente o indirettamente). Quando non lo è, tutto funziona esattamente come ti aspetteresti.
Qualcuno può dirmi se questa è una nuova "funzionalità" in Swift 2.0 o solo un brutto bug?
Cercavi di scrivere '==', invece di = ', nella funzione di' '=='? Potrebbe essere la causa dello strano comportamento, ma non l'ho ancora testato. – ABakerSmith
Purtroppo questa non è la causa (vedi la mia risposta sotto) ma hai ragione dovrebbe essere '==' – Qbyte
Spiacente, errore di battitura. Ma quello non era il mio problema. –