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 初始化器通过为某些参数提供默认值或允许完全删除某些参数,使开发人员更容易、更灵活地使用该类。