Хорошо, что-то странное происходит при написании собственный равен оператору для NSObject подклассов Swift 2.0, как это:Ошибка с оператором equals и NSObjects в Swift 2.0?
func ==(lhs: MyObject, rhs: MyObject) -> Bool {
return lhs.identifier == rhs.identifier
}
Для класса, который выглядит следующим образом:
class MyObject: NSObject {
let identifier: String
init(identifier: String) {
self.identifier = identifier
}
}
Это работало только штраф в Swift 1.2 и ниже. Это все еще вид работ:
let myObject1 = MyObject(identifier: "A")
let myObject2 = MyObject(identifier: "A")
let result = (myObject1 == myObject2)
// result is true
Пока все хорошо, но что, если обе переменные были опционными? не
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
И одна вещь, которая больше не работает:
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
Таким образом, очевидно, = больше не вызывает оператор == и сводит на нет его. Кажется, что просто сравнивайте примеры при использовании! =
Все это происходит только тогда, когда ваш класс является подклассом NSObject (прямо или косвенно). Когда это не так, все работает так, как вы ожидали.
Может ли кто-нибудь сказать мне, является ли это новой «функцией» в Swift 2.0 или просто неприятной ошибкой?
вы имели в виду, чтобы написать '==', вместо '=', в вашем файле '' == функции? Может быть причиной странного поведения, я еще не проверял это. – ABakerSmith
К сожалению, это не причина (см. Мой ответ ниже), но вы правы, он должен быть '==' – Qbyte
К сожалению, опечатка. Но это действительно не моя проблема. –