as我的理解是类型转换
比如
子类继承父类
class SonTwo: Person {
var twoName = "我是son2"
override init() {
super.init()
self.name = twoName
}
}
per3是person类型的属性接受子类的实例
let per3:Person = SonTwo()
as!用法
把per3转换成子类类型,然后输出
let p1 = per3 as! SonTwo
print("p1",p1,"per3",per3)
输出p1 <SwiftTest.SonTwo: 0x60800009f590> per3 <SwiftTest.SonTwo: 0x60800009f590>
我们发现它们的地址都是一样的,本质上还是sontwo类型的
as as是向上转换as是向上转换
我们把per3用as转换成父类的类型然后打印
let p2 = per3 as Person
print("p2",p2)
输出:p2 <SwiftTest.SonTwo: 0x60800009f590>
可以看出它们的地址都是一样的还是sontwo类型
还可以用于数值类型转换
let num1 = 20 as Float
as?和as!用法相反,as!转换的结果必须有值不能是空的,否则报错。as?转换的结果如果没有值可以是空,另外as?和as!是向下转换。
比如
子类继承父类
class SonTwo: Person {
var twoName = "我是son2"
override init() {
super.init()
self.name = twoName
}
}
per3是person类型的属性接受子类的实例
let per3:Person = SonTwo()
as!用法
把per3转换成子类类型,然后输出
let p1 = per3 as! SonTwo
print("p1",p1,"per3",per3)
输出p1 <SwiftTest.SonTwo: 0x60800009f590> per3 <SwiftTest.SonTwo: 0x60800009f590>
我们发现它们的地址都是一样的,本质上还是sontwo类型的
as as是向上转换as是向上转换
我们把per3用as转换成父类的类型然后打印
let p2 = per3 as Person
print("p2",p2)
输出:p2 <SwiftTest.SonTwo: 0x60800009f590>
可以看出它们的地址都是一样的还是sontwo类型
还可以用于数值类型转换
let num1 = 20 as Float
as?和as!用法相反,as!转换的结果必须有值不能是空的,否则报错。as?转换的结果如果没有值可以是空,另外as?和as!是向下转换。