Jeśli chcesz tylko porównać typy klas, a następnie można po prostu użyć NSStringFromClass porównać nazwy klas, jak poniżej:
class Test {}
var a = Test.self
var b : AnyClass = a
if(NSStringFromClass(b) == NSStringFromClass(Test.self)) {
println("yes")
} else {
println("no")
}
Jeśli chcesz dowiedzieć się, czy porównanie typ obiektu, ty można użyć „jeżeli ... to ... {}” składni kodu poniżej:
class Test { }
class Testb { }
var a = Test.self
let b : AnyObject = Testb()
if(b is Test) {
println("yes")
} else {
println("no")
}
Jeśli chcesz zrobić obiektu do obiektu sprawdzenie równości z operatora ==, można dokonać klasa testowa zgodną Equatable protokół. Można to rozszerzyć na typy struktur i klas w Swift, jak wyjaśniono w tym artykule NSHipster: http://nshipster.com/swift-comparison-protocols/.
Twój kod może być zapisany jak poniżej, proszę zauważyć: to jest sprawdzanie równości obiektów, więc nie możesz zdefiniować b jako AnyClass, musisz zdefiniować jako AnyObject.
class Test: Equatable { }
// MARK: Equatable
func ==(lhs: Test, rhs: Test) -> Bool {
return ObjectIdentifier(lhs) == ObjectIdentifier(rhs)
}
var a = Test()
var b : AnyObject = a
if((b as Test) == a) {
println("yes")
} else {
println("no")
}
TIL o nowego operatora: D Dzięki. – puttputt
Dlaczego nie można go porównać między "Any?" I "Any?"? Wystąpił błąd: 'Operatora binarnego === nie można zastosować do dwóch dowolnych? operandy' – Kuba
@Kuba: Operator '===' jest zdefiniowany tylko dla instancji klasy *. * –