返回

iOS Swift5 构造函数分析(一):关键字 designated、convenience、required

IOS

designated(指定的)构造函数

在 Swift 中,designated 构造函数是用于初始化对象的主要 构造函数,至少需要一个。它负责为对象分配内存、设置其属性,并使其处于可用的状态。designated 构造函数通常在类定义中显式声明,也可以通过继承或协议要求自动生成。

以下是一个例子:

class Person {
    let name: String

    // 不含任何参数的 designated 构造函数
    init(name: String) {
        self.name = name
    }
}

// 创建一个 Person 对象
let person = Person(name: "John Doe")
print(person.name) // 输出: "John Doe"

convenience(便利的)构造函数

convenience 构造函数是用来辅助 designated 构造函数的,用于提供一种更方便、更简洁的方式来创建对象。convenience 构造函数不能直接分配内存,必须调用 designated 构造函数来完成对象初始化。

以下是一个例子:

class Person {
    let name: String

    // 不含任何参数的 designated 构造函数
    init(name: String) {
        self.name = name
    }

    // convenience 构造函数,接收两个参数并将其传递给 designated 构造函数
    convenience init(firstName: String, lastName: String) {
        self.init(name: "\(firstName) \(lastName)")
    }
}

// 使用 convenience 构造函数创建 Person 对象
let person = Person(firstName: "John", lastName: "Doe")
print(person.name) // 输出: "John Doe"

required(必需的)构造函数

required 构造函数用于指定子类必须实现的构造函数。当一个父类有 required 构造函数时,它的子类必须实现一个具有相同参数和相同访问权限的构造函数。这确保了子类对象能够正确地初始化。

以下是一个例子:

class Vehicle {
    let make: String
    let model: String

    // required 构造函数,接收两个参数并将其存储在属性中
    required init(make: String, model: String) {
        self.make = make
        self.model = model
    }
}

class Car: Vehicle {
    let year: Int

    // 子类必须实现 required 构造函数,并调用父类的 required 构造函数
    required init(make: String, model: String, year: Int) {
        self.year = year
        super.init(make: make, model: model)
    }
}

// 创建一个 Car 对象
let car = Car(make: "Toyota", model: "Camry", year: 2023)
print(car.make) // 输出: "Toyota"
print(car.model) // 输出: "Camry"
print(car.year) // 输出: "2023"

总结

在 iOS Swift 5 中,构造函数是用来初始化对象的函数。designated 构造函数是主要构造函数,用于分配内存、设置属性并使对象可用。convenience 构造函数是辅助构造函数,用于提供一种更方便、更简洁的方式来创建对象。required 构造函数是必需构造函数,用于指定子类必须实现的构造函数。

通过对 designated、convenience 和 required 构造函数的深入理解,我们可以更灵活地设计类和对象,为构建健壮且可扩展的 iOS 应用程序打下坚实的基础。