在Swift中,便利初始化器(convenience init)和普通初始化器(init)之间几个关键的区别

當前文章的短網址連結為: 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

0 0 投票数
文章评分
订阅评论
提醒
guest

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

0 评论
最旧
最新 最多投票
内联反馈
查看所有评论