美文网首页
as、as?、as!三者之间的区别

as、as?、as!三者之间的区别

作者: EngineerPan | 来源:发表于2021-09-10 15:10 被阅读0次

as、as?、as!三者之间的区别

class Dog: Canidae {
    let name = "Jim"
}

class Canidae: Animat {
    let kind = "Dog"
}

class Animat {
    let subject = "Canidae"
}
  • as 的作用:
    1. 类型声明
    // 声明 num3 的类型为 CGFloat
    let num3 = num as CGFloat
    
    1. 向上转换为父类类型
    // 实例化子类
    let dog = Dog()
    // 将子类向上转换为父类类型 Canidae
    let canidae = dog as Canidae
    // 将子类向上转换为父类的父类类型 Animat
    let animat = dog as Animat
    
  • as? 的作用
    1. 向下转换为子类的可选类型
    // 实例化父类
    let animat = Animat()
    // 将父类向下转换为子类的可选类型,重点要注意是转换为了子类型的可选类型,需要处理值为 nil 的情况    
    let canidae: Canidae? = animat as? Canidae
    let dog: Dog? = animat as? Dog
    
  • as! 的作用
    1. 向下转换为子类类型
    // 实例化父类
    let animat = Animat()
    // 将父类向下转换为子类类型,和 as?的区别就是 as!转换后的类型不是可选类型
    let canidae: Canidae = animat as! Canidae
    let dog: Dog = animat as! Dog
    

相关文章

网友评论

      本文标题:as、as?、as!三者之间的区别

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