1、as
仅当一个值的类型在运行时(runtime)和as模式右边的指定类型一致、或者是该类型的子类 的情况下,才会匹配这个值。如果匹配成功,被匹配的值的类型被转换成as模式左边指定的模式。
as 应用条件有2种情况:
(1)、和“as”右边类型一致
(2)、是右边类型的子类
class ball {}
class football:ball {}
let a = ball()
a as ball //a和右面的ball类型一致,编译成功
let f = football()
f as ball // d 是右面ball的子类,编译成功
2、as!
如果碰到as左边类型是右边类型的父类,则会报错!as不可以用来父类转子类,这个时候可以用强转 as!
class ball {}
class football:ball {}
let a = ball()
a as ball // 编译成功
let f = football()
a as football // 编译报错
编译器会提醒你用as!
3、as?
as?相当于optional类型,如果强转失败的话会返回nil。
class ball {}
class football:ball {}
class basketball:ball {}
let aball:ball = basketball()
aball as? football // 取到的是nil
aball as! football //运行时报错
参考文章:http://blog.csdn.net/h454036111/article/details/49151933