Middle
What is the difference between conventions and designated?
sobes.tech AI
Answer from AI
convenience initializers are secondary; they can only call other initializers from the same class, ultimately delegating to a designated initializer. They are used to add convenient ways to create instances.
designated initializers are primary; they guarantee the complete initialization of all stored properties of the class (its own and inherited). They can call designated initializers of the parent class. Each class must have at least one designated initializer.
class BaseClass {
var baseProperty: String
init(baseProperty: String) { // Designated initializer
self.baseProperty = baseProperty
}
}
class DerivedClass: BaseClass {
var derivedProperty: Int
init(baseProperty: String, derivedProperty: Int) { // Designated initializer
self.derivedProperty = derivedProperty
super.init(baseProperty: baseProperty) // Call to parent's designated initializer
}
convenience init(baseProperty: String) { // Convenience initializer
self.init(baseProperty: baseProperty, derivedProperty: 0) // Delegates to its designated
}
convenience init() { // Convenience initializer
self.init(baseProperty: "Default Base", derivedProperty: -1) // Delegates to its designated
}
}