您的位置:首页 > 移动开发 > Swift

swift 对象类型转换

2015-11-09 12:11 507 查看
Swift 中对象是可以转换的,因为面向对象就会涉及继承,子类,父类等等

有几点规则我们先说一下

子类对象可以直接转换为父类对象的

父类对象可以有条件的转换为子类对象,这个我们下边在讲

首先我们创建三个类  人 Homan  男人 Man  男孩 Boy

Man 继承 Homan 

Boy 继承 Homan

那么,就可说  Man 是 Homan 的子类 

Boy 是 Homan的子类

Homan  是 Man的父类

Homan 是 Boy的父类

[objc] view
plaincopy

class Homan{  

    var name=""  

    init(homanName:String){  

        name=homanName  

    }  

    //自我介绍  

    func Introduce(){  

        println("I'm Homan My name is \(name)")  

    }  

}  

[objc] view
plaincopy

class Man:Homan {  

    var workName=""  

    override func Introduce() {  

        println("I'm Man  My name is \(name)  My workname is \(workName)")  

    }  

}  

[objc] view
plaincopy

class Boy:Homan {  

    var schoolName=""  

    override func Introduce() {  

        println("I'm Boy My My name is \(name)  schoolname is \(schoolName)")  

    }  

      

}  

首先我们看 子类转为父类

[objc] view
plaincopy

//1,子类对象可以直接转换成父类对象(向上转型,直接转)  

var h:Homan=Man(homanName: "张三")  

h.Introduce()  

  

var h1:Homan=Boy(homanName: "小马")  

h1.Introduce()  

接下来 我们讲父类转为子类

[objc] view
plaincopy

        //2,父类对象转为子类对象 as!   as?  

          

        //父类对象转换为子类对象 需要使用as!(如果当前对象是父类对象,但是他如果是子类对象转化过来的,那么可以转化回去  

        var man1=h as! Man  

        man1.workName="ios 开发"  

        man1.Introduce()  

          

        //如果要转化为子类对象,但是当前对象并不是这个子类对象转化过来的,那么会出现运行时错误:Could not cast value of type  

//        var man2=h1 as! Man  

          

        //如果我们需要将当前父类对象转为子类对象但是并不确定 当前对象是否为子类对象转化过来的,该如何处理? Swift为我们提供一个方法 as?  

        if let a = h as? Man{  

            a.workName="iOS 测试"  

            a.Introduce()  

        }else{  

            println("非子类对象")  

        }  

          

        if let a = h1 as? Man{  

            a.workName="iOS 测试"  

            a.Introduce()  

        }else{  

            println("非子类对象")  

        }  

          

          

还有一种情况是 不知道当前对象是否为子类对象转为父类对象的

[objc] view
plaincopy

//3 如何判断某一个对象是不是这个类的对象 可以 使用 对象 is 类 来判断  

  

//我们会发现判断子类对象是不是父类对象返回也是true  

println(h is Homan)  

println(h is Man)  

println(h is Boy)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: