我希望做类似以下的事情,但是当我试着看看b == Test.self时我得到了错误"任何类都无法转换为MirrorDisposition"。如何检查Type是否等于另一种类型?
class Test {
}
var a = Test.self
var b : AnyClass = a
if(b == Test.self) {
println("yes")
}
else {
println("no")
}
答案 0 :(得分:29)
使用与#34;相同的" operator ===
:
if b === Test.self {
print("yes")
}
else {
print("no")
}
这是有效的,因为类本身就是一个类对象,因此可以
与===
进行比较。
它不能与struct
合作。也许有人有一个更好的答案,适用于
所有Swift类型。
答案 1 :(得分:25)
if b.isKindOfClass(Test) {
println("yes")
} else {
println("no")
}
编辑:Swift 3
if b.isKind(of: Test.self) {
print("yes")
} else {
print("no")
}
尝试一下:)
答案 2 :(得分:5)
如果您只想比较类类型,那么您只需使用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类符合Equatable协议。这可以扩展到Swift中的Struct和Class类型,如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")
}