这是我所做的测试:我定义了两个类:
class Test1 {
var p1:String? = "p1"
init(){
println("init test1")
}
}
class Test2: Test1 {
init() {
super.init()
p1 = "p2"
println("init test2")
}
}然后创建一个Test2实例
let x = Test2()我想检查一下Test2是否是subClass of Test2
if x is Test1 {
println("ok")
}else{
println("no")
}但是我有一个构建错误: Test1不是subType of Test2
我哪里错了?
我试过,但没有成功,我也尝试过:
if let y = x as? Test1 {
println("ok")
}else{
println("no")
}发布于 2014-06-24 14:05:35
如果不想/不能更改上下文周围的代码,可以向上转换,然后对一行进行向下转换的测试:
if x as Any is Test1 {
println("ok")
}else{
println("no")
}发布于 2014-06-24 13:45:57
is、as和as?运算符仅用于“向下”。也就是说,如果您的实例类型为Test1,则可以检查是否可以使用is将其向下转换为Test2。
如果要检查Test2的实例是否是任何特定类的子类,则使用isKindOfClass()。但是,这只适用于NSObject类层次结构中的类。
let x = Test2()
if x.isKindOfClass(Test1) {
println("ok")
} else {
println("no")
}发布于 2014-06-24 13:50:54
正如Cezar所解释的那样,is的作品只是“向下”。
但是,您可以这样重写语句:
var x: AnyObject = Test2()
if x is Test1 {
println("ok")
}else{
println("no")
}声明x为任意对象,因此您可以测试它是否符合任何对象类型。
这个会打印好的
https://stackoverflow.com/questions/24387826
复制相似问题