Swift 中为什么需要 convenience 关键字?


在 Swift 中,您可以创建额外的初始化器来为属性提供默认值。您可以使用 convenience 关键字来添加此功能。让我们来看一些在 Swift 语言中如何使用 convenience 初始化器的示例。

Swift 中的 convenience 初始化器是什么?

在 Swift 中,用 convenience 关键字标记的类中的次要初始化器,提供创建该类实例的额外或替代方法。它简化并简化了初始化过程,使开发人员更容易处理该类。次要初始化器可以调用同一类的指定初始化器,从而减少代码重复并提高可维护性。

以下是如何在 Swift 中使用 convenience 初始化器的示例

步骤 1 − 在此示例中,我们有一个名为 Person 的类,它有一个指定初始化器,该初始化器同时接收名称和年龄参数。我们还有一个 convenience 初始化器,它只接收名称参数并将年龄设置为默认值 0。

步骤 2 − convenience 初始化器用 convenience 关键字标记。它使用 self.init 调用指定初始化器,并传入名称参数和年龄的默认值。

步骤 3 − 通过此设置,我们可以使用 convenience 初始化器仅使用名称创建 Student 实例,就像我们对 juile 所做的那样。年龄会自动设置为默认值 0。我们还可以使用指定初始化器创建同时具有名称和年龄的 Student 实例,就像我们对 alex 所做的那样。

示例

import Foundation
class Student {
    
   let name: String
   let age: Int
    
   init(name: String, age: Int) {
      self.name = name
      self.age = age
   }
    
   convenience init(name: String) {
      self.init(name: name, age: 0)
   }
}
let alex = Student(name: "Alex Murphy", age: 30)
let julie = Student(name: "Julie Martin")
print("Alex age: \(alex.age)")
print("Julie age: \(julie.age)")

输出

Alex age: 30
Julie age: 0

以下是另一个在 Swift 中使用 convenience 初始化器的示例

步骤 1 − 在此示例中,我们有一个名为 Shape 的类,它有一个指定初始化器,该初始化器接收一个名称参数。我们还有一个 convenience 初始化器,它将名称设置为默认值“Unknown Shape”。

步骤 2 − 我们还有一个 Shape 的子类 Circle,它有一个指定初始化器,该初始化器接收一个名称和一个半径参数。我们还有一个 convenience 初始化器,它只接收一个半径参数并将名称设置为默认值“Circle”。

步骤 3 − Circle 类中的 convenience 初始化器用 convenience 关键字标记。它使用 self.init 调用同一类的指定初始化器,并传入名称的默认值以及半径参数。

步骤 4 − 通过此设置,我们可以使用 convenience 初始化器仅使用默认名称创建一个 Shape 实例,就像我们对 unknownShape 所做的那样。我们还可以使用 convenience 初始化器仅使用半径创建一个 Circle 实例,就像我们对 circle 所做的那样。

步骤 5 − 名称会自动设置为默认值“Circle”。我们还可以使用指定初始化器创建同时具有名称和半径的 Circle 实例。

示例

import Foundation
class Shape {
    
   let name: String
    
   init(name: String) {
      self.name = name
   }
    
   convenience init() {
      self.init(name: "Unknown Shape")
   }
}
class Circle: Shape {
    
   let radius: Double
    
   init(name: String, radius: Double) {
      self.radius = radius
      super.init(name: name)
   }
    
   convenience init(radius: Double) {
      self.init(name: "Circle", radius: radius)
   }
}
let unknownShape = Shape()
let circle = Circle(radius: 5.0)
print("Shape 1: \(unknownShape.name)")
print("Shape 2: \(circle.name)")

输出

Shape 1: Unknown Shape
Shape 2: Circle

Swift 中的 convenience 初始化器具有许多优点

  • 简化初始化 − convenience 初始化器提供了一种创建类实例的附加或替代方法,增强了开发人员在使用该类时的便捷性和灵活性。通过为某些参数提供默认值或允许完全删除某些参数,它简化了初始化过程。

  • 减少代码重复 − convenience 关键字允许次要初始化器调用同一类的指定初始化器,从而减少代码重复并提高可维护性。这确保了对 convenience 初始化器所做的任何修改都会自动反映在指定初始化器中。

  • 提供更好的可读性 − convenience 初始化器通过创建不同的初始化器来简化代码库,从而提高代码的可读性。它有助于开发人员理解初始化器的用途。

  • 提供更大的灵活性 − 您可以根据需要创建多个 convenience 初始化器。它有助于使类更灵活,更容易编写测试用例。

结论

Swift 使用 convenience 关键字声明类的 convenience 初始化器,它提供了一种初始化实例的替代方法。convenience 初始化器可以减少代码重复,提高可读性,并提供更大的灵活性,同时有助于简化和加快初始化过程。convenience 初始化器通过为某些参数提供默认值或允许完全删除某些参数,使开发人员更容易、更灵活地使用该类。

更新于:2023年4月11日

567 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告