返回
iOS Swift5 构造函数分析(一):关键字 designated、convenience、required
IOS
2023-09-01 18:24:32
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 应用程序打下坚实的基础。