美文网首页
Swift-OOP-初始化器

Swift-OOP-初始化器

作者: 守护地中海的花 | 来源:发表于2020-11-24 20:53 被阅读0次
    • 类、结构体、枚举都可以定义初始化器
    • 类有2种初始化器:指定初始化器(designated)、便捷初始化器(convenience initializer)
    • 每个类至少有一个指定初始化器,指定初始化器是累的主要初始化器
    • 默认初始化器总是类的指定初始化器
    • 类偏向于少量指定初始化器,一个类通常只有一个指定初始化器

    • 初始化器的相互调用规则
    • 指定初始化器必须从它的直系父类调用指定初始化器
    • 便捷初始化器必须从相同的类里调用另一个初始化器
    • 便捷初始化器最终必须调用一个指定初始化器

    required

    print("required")
    class Person {
        var name: String
        var age: Int
        required init(name: String,age: Int) {
            self.name = name
            self.age = age
        }
    }
    
    var person = Person(name: "wpp", age: 27)
    print(person.name,person.age)
    
    class Student: Person {
        required init(name: String, age: Int) {
            super.init(name: name, age: age)
        }
    }
    
    • 用required修饰指定初始化器,表面其所有子类都必须实现该初始化器(通过继承或重写实现)
    • 如果子类重写了required初始化器,也必须加上required不用加override

    属性观察器

    class Person {
        var age: Int {
            willSet {
                print("willSet",newValue)
            }
            didSet {
                print("didSet",oldValue,age)
            }
        }
        init() {
            age = 0
        }
    }
    
    class Student: Person {
        override init() {
            super.init()
            self.age = 1
        }
    }
    
    let stu = Student()
    print(stu)
    
    • 父类的属性在它自己的初始化器种赋值不会触发属性观察期,但是在子类初始化器种赋值会触发属性观察期

    相关文章

      网友评论

          本文标题:Swift-OOP-初始化器

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