首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >swift SubClass与铸造

swift SubClass与铸造
EN

Stack Overflow用户
提问于 2014-06-24 13:23:44
回答 3查看 2K关注 0票数 3

这是我所做的测试:我定义了两个类:

代码语言:javascript
复制
class Test1 {
    var p1:String? = "p1"
    init(){
       println("init test1")
    }
}

class Test2: Test1 {
    init() {
        super.init()
        p1 = "p2"
        println("init test2")
    }

}

然后创建一个Test2实例

代码语言:javascript
复制
let x = Test2()

我想检查一下Test2是否是subClass of Test2

代码语言:javascript
复制
if x is Test1 {
    println("ok")
}else{
    println("no")
}

但是我有一个构建错误: Test1不是subType of Test2

我哪里错了?

我试过,但没有成功,我也尝试过:

代码语言:javascript
复制
if let y = x as? Test1 {
    println("ok")
}else{
    println("no")
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-24 14:05:35

如果不想/不能更改上下文周围的代码,可以向上转换,然后对一行进行向下转换的测试:

代码语言:javascript
复制
if x as Any is Test1 {
    println("ok")
}else{
    println("no")
}
票数 3
EN

Stack Overflow用户

发布于 2014-06-24 13:45:57

isasas?运算符仅用于“向下”。也就是说,如果您的实例类型为Test1,则可以检查是否可以使用is将其向下转换为Test2

如果要检查Test2的实例是否是任何特定类的子类,则使用isKindOfClass()。但是,这只适用于NSObject类层次结构中的类。

代码语言:javascript
复制
let x = Test2() 
if x.isKindOfClass(Test1) {
    println("ok")
} else {
    println("no")
}
票数 2
EN

Stack Overflow用户

发布于 2014-06-24 13:50:54

正如Cezar所解释的那样,is的作品只是“向下”。

但是,您可以这样重写语句:

代码语言:javascript
复制
    var x: AnyObject = Test2()

    if x is Test1 {
        println("ok")
    }else{
        println("no")
    }

声明x为任意对象,因此您可以测试它是否符合任何对象类型。

这个会打印好的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24387826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档