Swift 语言中类型转换使用的关键字是as,与类型检查相似,Swift语言中的类型转换有向上兼容向下转换之分,也就是as,as?/as!的区别
as as! as? 的区别
-
as 向上转换,转换成自己的基类
-
as!想下转换 转换成自己的派生类,属于强制转换,转换失败会报错
-
as?与as! 格式相似,转换成自己的派生类,转换失败返回nil
例:
定义三个类 :"人(Person)" "学生(Student)" "教师(Teacher)",Person做为Student和Teacher的基类
// 定义人员基类
class Person {
var name : String
init(_ name: String){
self.name = name
}
}
// 定义学生类
class Student : Person {
}
// 定义教师类
class Teacher : Person {
}
as: 是向上转换,转换成基类
let student = Student("name")
let person = student as Person
print(person)
// let tearcher = person as Teacher // 报错
as?是向下转化,转化成自己的派生类,转换失败返回nil
let person2:Person = Teacher("LXW")
let tearcher2 = person2 as? Teacher
if let teamTearchers = tearcher2{
print(teamTearchers)
}
as! 和as?的转换模式相同,不同之处是转换失败会报错,是强制转换,确保100%会成功的转换则可使用 as!,否则使用 as?
let tearcher3 = person2 as! Teacher
应用场景
- 消除二义性,数值类型转换
let num1 = 42 as Double
print(num1)
//switch 语句中进行模式匹配
switch num1 {
case let num1 as Float:
print("这是Folat")
case let num1 as Double:
print("这是Double")
default:
print("转换时报")
}
- 假如:有两个控制器 HomVC MeVC,在方法addsubController()中分别添加到ViewController的subviewControllers里面,你在另一个方法里面需要改变HomeVC 的一个属性,这时候你可以获取到viewController的subViewCOntrollers拿到一个ViewContoller,但是ViewController是HomVC的父类,你无法的到HomVC他独有的属性,这时候就需要 as? 做转换






网友评论