-
The as! Operator!
让我们来操作as吧!
-
说明
因为最近在学习Swift,这里根据苹果官方文档加上自己的理解,总结了下常用的as、as!、as? 这三种类型转换操作符的异同和使用方式。
-
正文
-
as
keyword:Guaranteed conversion、 Upcasting
理解:字面理解就是有保证的转换,从派生类转换为基类的向上转型
著名代码:// 将1转成float let num = 1 as CGFloat |------------------------ // dog转换到父类animal class Animal {} Dog: let d = Dog() d as Animal
-
as!
keyword:Forced conversion、 Downcasting
理解:字面理解就是有强项转换,即向下转型,子类(派生类)向父类转换,官方解释说这是一个不被保证的转换,可能会因为强转的失败而会导致崩溃。同时!是一个陷阱的标志,就像⚠️一样,用起来存在一定危险性
著名代码: @H_404_66@// Dog到Animal的转化 let a: Animal = Dog() a as Dog // as不能将a转成Dog,即不能向下转换 a as! Dog // as!能强行将a转成Dog -> Bingo -
as?
keyword:Optional、 Nil
理解:Swfit代码写一段时间后会发现到处都是?,这预示着如果转换不成功的时候便会返回一个 nil 对象。成功的话返回可选类型值(optional)。
著名代码:// Dog、Cat和Animal的转换关系 class Animal {} Cat: Dog: Animal { var name = "Spot" } let dog: Dog? = nil dog?.name // 选择调用,返回空值nil dog!.name // 强行调用,报错 let animal: Animal = Cat() animal as? Dog // 猫转狗失败,返回nil animal as! // 猫强行转狗,失败报错
-
-
引用参考
- 苹果官方文档
- 转自:http://www.jianshu.com/p/edbdc60218d1