Swift之as、as?和as!
as
Guaranteed conversation + Upcasting
有保证的转换,从派生类转换为基类的向上转型。
1 | let num = 1 as CGFloat //将1转成float |
as!
Forced conversation + Downcasting
as!表示强制转换,向下转型,即基类向派生类转型。由于是强制类型转换,在转换失败时会报runtime运行时错误。
1 | // Dog到Animal的转化 |
as?
Optional、 Nil
as? 和 as! 操作符的转换规则完全一样。但as?
如果转换不成功的时候便会返回一个 nil 对象。成功的话返回可选类型值(optional),需要我们拆包使用。 由于as?
在转换失败的时候也不会出现错误,所以对于如果能确保100%会成功的转换则可使用 as!
,否则使用as?
1 | // Dog、Cat和Animal的转换关系 |