swift3.0 as、as!、as? 关键字 三种操作符的使用

练习写swift代码,一直不明白as、as!、as? 什么时候使用,只是根据系统提示来修改,今天研究了下.

as
keyword:Guaranteed conversion、 Upcasting
字面理解就是有保证的转换,从派生类转换为基类的向上转型

// 将1转成float
let num = 1 as CGFloat
|------------------------
// dog转换到父类animal
class Animal {}
class Dog: Animal {}
let d = Dog()
d as Animal

as!

keyword:Forced conversion、 Downcasting
字面理解就是有强项转换,即向下转型,子类(派生类)向父类转换,官方解释说这是一个不被保证的转换,可能会因为强转的失败而会导致崩溃。同时 !是一个陷阱的标志

// Dog到Animal的转化
class Animal {}
class 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 {}
class Cat: Animal {}
class Dog: Animal {
var name = "Spot"
}
let dog: Dog? = nil
dog?.name        // 选择调用,返回空值nil
dog!.name        // 强行调用,报错
let animal: Animal = Cat()
animal as? Dog    // 猫转狗失败,返回nil
animal as! Dog    // 猫强行转狗,失败报错

你可能感兴趣的:(swift3.0 as、as!、as? 关键字 三种操作符的使用)