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)
有几点规则我们先说一下
子类对象可以直接转换为父类对象的
父类对象可以有条件的转换为子类对象,这个我们下边在讲
首先我们创建三个类 人 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)
相关文章推荐
- swift 对象类型转换
- swift 单例模式
- swift 单例模式
- swift 对象方法
- swift 对象方法
- swift 运算属性
- swift 运算属性
- swift 属性值监测
- swift 属性值监测
- swift 结构体
- swift 结构体
- swift枚举
- swift枚举
- Silver: Swift for .NET, Java and Cocoa
- 《从零开始学Swift》学习笔记(Day 33)——属性观察者
- swift 闭包 由浅入深 优化
- swift 闭包 由浅入深 优化
- 《从零开始学Swift》学习笔记(Day 33)——属性观察者
- swift中函数的形参和返回值
- Swift语言中的一些访问控制设置详解