返回
Initializer in iOS
IOS
2024-02-05 07:41:06
iOS 中的 Initializer 是一个特殊的函数,用于初始化对象的属性并将其置于已知状态。与其他语言不同,iOS 中的类使用 designated initializer,它明确指定了对象的属性如何初始化。如果没有提供显式的 designated initializer,编译器会自动创建一个默认的。
Designated Initializer
Designated initializer 是类中唯一可以调用其他 initializer 的 initializer。它必须初始化所有存储属性,并且在子类中不能被覆盖。
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
Convenience Initializer
Convenience initializer 是一个辅助 initializer,它调用 designated initializer 来初始化对象。它不能初始化所有存储属性,并且可以在子类中被覆盖。
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)
}
}
Required Initializer
Required initializer 是一个特殊的 designated initializer,它必须在子类中被实现。它通常用于确保子类遵守某些要求。
class Vehicle {
var numberOfWheels: Int
required init(numberOfWheels: Int) {
self.numberOfWheels = numberOfWheels
}
}
class Car: Vehicle {
override init(numberOfWheels: Int) {
super.init(numberOfWheels: numberOfWheels)
}
}
Factory Initializer
Factory initializer 是一个静态方法,它返回一个新创建的对象。它通常用于创建复杂对象或管理单例。
class Person {
static func createPerson(name: String, age: Int) -> Person {
return Person(name: name, age: age)
}
}
Understanding the Rules
了解以下规则对于有效使用 initializer 至关重要:
- Designated initializer 必须初始化所有存储属性。
- Convenience initializer 不能初始化所有存储属性。
- Required initializer 必须在子类中被实现。
- Initializer 不能调用自身。
- Initializer 不能被覆盖成 convenience initializer。
Conclusion
Initializer 是 iOS 开发中用于初始化对象的重要工具。通过理解不同类型的 initializer 以及它们遵循的规则,您可以创建健壮且可维护的代码。记住,指定和辅助 initializer 之间的区别、required initializer 的作用以及 factory initializer 的便利性,将帮助您有效地利用 iOS 中的 initializer 机制。