美文网首页
iOS开发 - 「Swift 学习」Swift继承(重写属性观察

iOS开发 - 「Swift 学习」Swift继承(重写属性观察

作者: 俺不是大佬儿 | 来源:发表于2022-02-26 14:50 被阅读0次

    重写属性观察器

    在属性重写中为一个继承来的属性添加属性观察器,当继承来的属性发生改变时就可以监测到

    注意:
    不可以给继承来的常量存储属性或者继承来的只读计算型属性添加属性观察器

    //父类
    class Circle {
        var radius = 12.5
        var area: String {
            return "矩形半径 \(radius) "
        }
    }
    
    // 继承父类 Circle
    class Rectangle: Circle {
        var print = 7
        //重写area属性
        override var area: String {
            return super.area + " ,但现在被重写为 \(print)"
        }
    }
    
    class Square:Rectangle {
        //重写父类Circle的radius属性
        override var radius: Double {
            //监测radius属性有新值后对父类Rectangle中的print属性赋新值
            didSet {
                print = Int(radius/5.0)+1
            }
        }
    }
    

    调用

    func overridePropertyStudy(){
        let rect = Rectangle()
        rect.radius = 25.0
        rect.print = 3
        print("Radius \(rect.area)")
        
        let sq = Square()
        sq.radius = 60.0
        print("半径:\(sq.area)")
    }
    

    调用结果

    Radius 矩形半径 25.0  ,但现在被重写为 3
     
    半径:矩形半径 60.0  ,但现在被重写为 13
    

    防止重写

    使用 final 关键字防止继承属性被子类重写
    如果重写了final方法,属性或下标脚本在编译时会报错

    可以通过在关键字class声明的类前添加final关键字(final class)将整个类标记为final防重写类,这样标记的类是不可以被继承,会报编译错误

    final标记class继承报错

    \color{gray}{欢迎大佬儿来指正纠错,共同学习😏!!}

    相关文章

      网友评论

          本文标题:iOS开发 - 「Swift 学习」Swift继承(重写属性观察

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