[背景]
折腾了:
后,需要去搞懂is和as,尤其是as!的含义。
[解决过程]
1.搜:
swift as downcast
参考:
[总结]
类型转换是一种检查实例类型的方式,
也是将一个实例看成,好像是一个不同的,处于类的继承关系树中的某个层次的,父类或子类
Swift中的类型转换是用is和as操作符来实现的:
is:判断某个实例是否是某种类型
as:将某个实例转换为另外某个类型(不是完全无关的类型,而是该类的某个父类或子类)
-》也可以通过 类型转换 来判断 一个类型type 是否遵循某个协议protocol
如果你确定某个实例是某个类的话,那么可以去用类型转换
由于向下转换可能会转换失败,所以类型转换操作符有两种形式:
- as?:返回一个类型的optional类型的变量
- 如果你不太确定你的向下转换是否成功,则用这个as?
- as!:返回,尝试强制转换,然后强制解包unwrap,后的结果
此处的示例代码中的:
if let movie = item as? Movie {
实际上内部处理过程是:
item as? Movie
是个整体:
内部处理过程是:
返回的是Movie?类型==Optional<Movie>
然后是:
movie = Movie?
再然后是:
let movie?
这就和之前普通的Optional的变量是一样的了。
上面这句话,可以解读为:
把item看成是,转换为Movie;
如果转换成功,则把从OptionalMovie类型的变量所返回的值,,保存到一个,,新建的名为movie的临时变量中
注:
casting,类型转换,实际上并没有修改变量,改变改变的值,
底层的实例对象,还是和之前一样,没有变。
只是简单的,把对应变量视为,去按照对应转换为的类型去访问该变量。