當前文章的短網址連結為: https://unos.top/98ms
1. 定义和目的
- 普通初始化器(Designated Initializer):
- 这是类或结构体的主要初始化器,负责确保所有存储属性都被初始化。每个类必须至少有一个指定初始化器。
- 它可以调用其他指定初始化器,但必须确保所有属性在初始化完成时都有有效值。
- 这是类或结构体的主要初始化器,负责确保所有存储属性都被初始化。每个类必须至少有一个指定初始化器。
- 便利初始化器(Convenience Initializer):
- 这是一个辅助初始化器,通常用于提供更简便的初始化方式。它不能独立完成初始化,而是必须调用同一类中的其他指定初始化器。
- 便利初始化器通常用于简化初始化过程,提供默认值或更易用的参数组合。
- 这是一个辅助初始化器,通常用于提供更简便的初始化方式。它不能独立完成初始化,而是必须调用同一类中的其他指定初始化器。
2. 调用关系
- 普通初始化器:
- 可以直接初始化类的所有属性,并且可以调用其他指定初始化器。
- 便利初始化器:
- 必须调用同一类中的指定初始化器,不能直接初始化所有属性。它的主要目的是提供额外的初始化选项。
3. 使用场景
- 普通初始化器:
- 当你需要确保所有属性都被初始化并且需要执行必要的设置时,使用普通初始化器。
- 便利初始化器:
- 当你想要提供多种初始化方式,或者希望简化初始化过程时,使用便利初始化器。例如,提供一些默认参数,或者根据不同的输入类型进行初始化。
4. 示例代码
class Person {
var name: String
var age: Int
// 指定初始化器
init(name: String, age: Int) {
self.name = name
self.age = age
}
// 便利初始化器
convenience init(name: String) {
self.init(name: name, age: 0) // 调用指定初始化器
}
}
// 使用
let person1 = Person(name: "Alice", age: 30) // 使用指定初始化器
let person2 = Person(name: "Bob") // 使用便利初始化器,年龄默认为0
Swift