Сравнение типов с Swift
Я хочу сделать что-то вроде следующего, но когда я пытаюсь увидеть, если b == Test.self, я получаю сообщение об ошибке "Любой класс не конвертируется в MirrorDisposition". Как я могу проверить, соответствует ли тип другому типу?
class Test {
}
var a = Test.self
var b : AnyClass = a
if(b == Test.self) {
println("yes")
}
else {
println("no")
}
Ответы
Ответ 1
Используйте оператор "identity to" ===
:
if b === Test.self {
print("yes")
}
else {
print("no")
}
Это работает, потому что тип класса он сам является объектом класса и поэтому может
сравниваться с ===
.
Он не будет работать с struct
s. Возможно, у кого-то есть лучший ответ, который работает для
все типы Swift.
Ответ 2
if b.isKindOfClass(Test) {
println("yes")
} else {
println("no")
}
Изменить: Swift 3
if b.isKind(of: Test.self) {
print("yes")
} else {
print("no")
}
попробуйте:)
Ответ 3
Если вы просто хотите сравнить типы классов, то вы можете просто использовать NSStringFromClass для сравнения имен классов, как показано ниже:
class Test {}
var a = Test.self
var b : AnyClass = a
if(NSStringFromClass(b) == NSStringFromClass(Test.self)) {
println("yes")
} else {
println("no")
}
Если вы хотите узнать или сравнить тип объекта, вы можете использовать "if... is... {}" синтаксис как код ниже:
class Test { }
class Testb { }
var a = Test.self
let b : AnyObject = Testb()
if(b is Test) {
println("yes")
} else {
println("no")
}
Если вы хотите сделать проверку объекта для проверки равенства с помощью оператора ==, вы можете сделать свой класс Test совместимым с Equableable. Это можно расширить до типа 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")
}