Если вы просто хотите, чтобы сравнить типы классов, то вы можете просто использовать NSStringFromClass сравнить имена классов, как показано ниже:
class Test {}
var a = Test.self
var b : AnyClass = a
if(NSStringFromClass(b) == NSStringFromClass(Test.self)) {
println("yes")
} else {
println("no")
}
Если вы хотите узнать или сравнить тип объекта, вы можно использовать «если ... это ... {}» синтаксис как код ниже:
class Test { }
class Testb { }
var a = Test.self
let b : AnyObject = Testb()
if(b is Test) {
println("yes")
} else {
println("no")
}
Если вы хотите сделать объект объекта проверки равенства с помощью оператора ==, вы можете сделать свой класс Test соответствует Equatable протокол. Это можно расширить до типа Struct и Class в Swift, как описано в этой статье NSHipster: http://nshipster.com/swift-comparison-protocols/.
Вы можете записать код, как показано ниже, обратите внимание: это проверка равенства объектов, поэтому вы не можете определить b как AnyClass, вам нужно определить как 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 о новом оператора: D Спасибо. – puttputt
Почему его нельзя сравнивать между 'Any? 'И' Any? '? У меня была ошибка: 'Двоичный оператор === не может быть применен к двум Любые? operands' – Kuba
@Kuba: Оператор '===' определен только для экземпляров класса *. * –