用 Swift 比较类型
Comparing types with Swift
我想做类似下面的事情,但是当我尝试查看是否 b == Test.self 时,我收到错误 "Any class is not convertible to MirrorDisposition"。我如何检查一个类型是否等于另一个类型?
class Test {
}
var a = Test.self
var b : AnyClass = a
if(b == Test.self) {
println("yes")
}
else {
println("no")
}
使用“等同于”运算符 ===
:
if b === Test.self {
print("yes")
}
else {
print("no")
}
这是可行的,因为 class 的类型本身就是一个 class 对象,因此可以
与 ===
.
进行比较
它不适用于 struct
s。也许有人有更好的答案
所有 Swift 类型。
如果你只想比较 class 类型,那么你可以简单地使用 NSStringFromClass 来比较 class 名称,如下所示:
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")
}
如果你想用 == 运算符做对象到对象的相等性检查,你可以让你的测试 class 符合 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")
}
if b.isKindOfClass(Test) {
println("yes")
} else {
println("no")
}
编辑:Swift 3
if b.isKind(of: Test.self) {
print("yes")
} else {
print("no")
}
试一试:)
要比较实例,请使用
type(of: instanceA) == type(of: instanceB)
我想做类似下面的事情,但是当我尝试查看是否 b == Test.self 时,我收到错误 "Any class is not convertible to MirrorDisposition"。我如何检查一个类型是否等于另一个类型?
class Test {
}
var a = Test.self
var b : AnyClass = a
if(b == Test.self) {
println("yes")
}
else {
println("no")
}
使用“等同于”运算符 ===
:
if b === Test.self {
print("yes")
}
else {
print("no")
}
这是可行的,因为 class 的类型本身就是一个 class 对象,因此可以
与 ===
.
它不适用于 struct
s。也许有人有更好的答案
所有 Swift 类型。
如果你只想比较 class 类型,那么你可以简单地使用 NSStringFromClass 来比较 class 名称,如下所示:
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")
}
如果你想用 == 运算符做对象到对象的相等性检查,你可以让你的测试 class 符合 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")
}
if b.isKindOfClass(Test) {
println("yes")
} else {
println("no")
}
编辑:Swift 3
if b.isKind(of: Test.self) {
print("yes")
} else {
print("no")
}
试一试:)
要比较实例,请使用
type(of: instanceA) == type(of: instanceB)