iOS Swift5 构造函数 designated、convenience、required

1、关键字说明

designated(中文含义:指定的) :它指的是我们定义的公开的构造函数;公开的构造函数至少有一个,也可以有多个; convenience(中文含义:便利的):我们可以用该关键字来扩展(即新增)构造函数,因此是修饰构造函数的,但需要注意几点: *必需在同一个类中使用; *必需调用一个 designated 构造函数,调用时使用的是 self.init,而不是 super.init; *子类无法重载被 convenience 修饰的构造方法; required(中文含义:必要的):子类必需要实现父类指定的构造函数;

关键字 designated 和 convenience 修饰构造函数的关系:

WX20211115-142732.png

二、Demo

定义基类People

    var name: String?
    var age: Int
    var sexy: Int
    
    init(_ name: String, age: Int, sexy: Int) {
        self.name = name
        self.age = age
        self.sexy = sexy
    }
    
    convenience init(_ name: String, age: Int) {
        self.init(name, age: age, sexy: 0)
    }
    
    required init(_ name: String) {
        self.name = name
        self.age = 0
        self.sexy = 0
    }
    
}

定义子类 Student
class Student: People {
    // 父类的 designated 构造方法,子类可以进行重载
    override init(_ name: String, age: Int, sexy: Int) {
        super.init(name, age: age, sexy: sexy)
    }
    // 父类的 convenience 构造方法,子类无法继承
    // 父类的 required 构造方法,子类必须实现
    required init(_ name: String) {
        fatalError("init(_:) has not been implemented")
    }
}

你可能感兴趣的:(iOS Swift5 构造函数 designated、convenience、required)