?!as

作者: rajs20222007 | 来源:发表于2018-11-18 09:53 被阅读0次

    ?表示可能为空

    假设没有“?”,原来该怎么用怎么用,比如self.a.b.c
    但如果self或a或b为空,可能会奔溃;
    这时对可能为空的地方加上?,就能避免奔溃;
    self?.a?.b?.c

    !表示一定有值

    self.textLabel!.text = "I am Label"

    as 有保证的转换,从派生类转换为基类的向上转型

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

    as! 有强项转换,即向下转型

    // 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? 转换不成功的时候便会返回一个 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  // 猫强行转狗,失败报错
    

    ??双问好

    用法:newValue = optionalValue ?? value
    若optionalValue非nil时,newValue的值为optionalValue的值,若optionalValue为nil时,newValue的值为value的值
    let object = self.objectForKey(key) ?? Int(0)

    相关文章

      网友评论

          本文标题:?!as

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