美文网首页我的swift路程iOS知识点Swift
Swift as、as!、as? 关键字 三种操作符的使用

Swift as、as!、as? 关键字 三种操作符的使用

作者: BigBagFind | 来源:发表于2016-11-17 00:59 被阅读879次
    • 题记
    The as! Operator!

    让我们来操作as吧!

    • 说明
    因为最近在学习Swift,这里根据苹果官方文档加上自己的理解,总结了下常用的as、as!、as? 这三种类型转换操作符的异同和使用方式。
    • 正文
    • as

    keywordGuaranteed conversion、 Upcasting
    理解:字面理解就是有保证的转换,从派生类转换为基类的向上转型
    著名代码:

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

    keywordForced 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  // 猫强行转狗,失败报错
    

    相关文章

      网友评论

        本文标题:Swift as、as!、as? 关键字 三种操作符的使用

        本文链接:https://www.haomeiwen.com/subject/cafdpttx.html