swift 对象类型转换

来源:互联网 发布:mac键盘大写灯不亮 编辑:程序博客网 时间:2024/06/05 08:55

Swift 中对象是可以转换的,因为面向对象就会涉及继承,子类,父类等等

有几点规则我们先说一下

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

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


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

Man 继承 Homan 

Boy 继承 Homan


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

Boy 是 Homan的子类

Homan  是 Man的父类

Homan 是 Boy的父类


[objc] view plaincopy
  1. class Homan{  
  2.     var name=""  
  3.     init(homanName:String){  
  4.         name=homanName  
  5.     }  
  6.     //自我介绍  
  7.     func Introduce(){  
  8.         println("I'm Homan My name is \(name)")  
  9.     }  
  10. }  


[objc] view plaincopy
  1. class Man:Homan {  
  2.     var workName=""  
  3.     override func Introduce() {  
  4.         println("I'm Man  My name is \(name)  My workname is \(workName)")  
  5.     }  
  6. }  


[objc] view plaincopy
  1. class Boy:Homan {  
  2.     var schoolName=""  
  3.     override func Introduce() {  
  4.         println("I'm Boy My My name is \(name)  schoolname is \(schoolName)")  
  5.     }  
  6.       
  7. }  


首先我们看 子类转为父类

[objc] view plaincopy
  1. //1,子类对象可以直接转换成父类对象(向上转型,直接转)  
  2. var h:Homan=Man(homanName: "张三")  
  3. h.Introduce()  
  4.   
  5. var h1:Homan=Boy(homanName: "小马")  
  6. h1.Introduce()  


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

[objc] view plaincopy
  1.         //2,父类对象转为子类对象 as!   as?  
  2.           
  3.         //父类对象转换为子类对象 需要使用as!(如果当前对象是父类对象,但是他如果是子类对象转化过来的,那么可以转化回去  
  4.         var man1=h as! Man  
  5.         man1.workName="ios 开发"  
  6.         man1.Introduce()  
  7.           
  8.         //如果要转化为子类对象,但是当前对象并不是这个子类对象转化过来的,那么会出现运行时错误:Could not cast value of type  
  9. //        var man2=h1 as! Man  
  10.           
  11.         //如果我们需要将当前父类对象转为子类对象但是并不确定 当前对象是否为子类对象转化过来的,该如何处理? Swift为我们提供一个方法 as?  
  12.         if let a = h as? Man{  
  13.             a.workName="iOS 测试"  
  14.             a.Introduce()  
  15.         }else{  
  16.             println("非子类对象")  
  17.         }  
  18.           
  19.         if let a = h1 as? Man{  
  20.             a.workName="iOS 测试"  
  21.             a.Introduce()  
  22.         }else{  
  23.             println("非子类对象")  
  24.         }  
  25.           
  26.           

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

[objc] view plaincopy
  1. //3 如何判断某一个对象是不是这个类的对象 可以 使用 对象 is 类 来判断  
  2.   
  3. //我们会发现判断子类对象是不是父类对象返回也是true  
  4. println(h is Homan)  
  5. println(h is Man)  
  6. println(h is Boy)
0 0
原创粉丝点击