Middle
Jaký je rozdíl mezi conventions a designated?
sobes.tech AI
Odpověď od AI
Konzolové inicializátory jsou sekundární, mohou volat pouze jiné inicializátory stejné třídy, a nakonec delegují volání na určený inicializátor. Používají se k přidání pohodlných způsobů vytváření instancí.
Určené inicializátory jsou hlavní, zajišťují úplnou inicializaci všech uložených vlastností třídy (jejích a rodičovských). Mohou volat určené inicializátory rodičovské třídy. Každá třída by měla mít alespoň jeden určený inicializátor.
class BaseClass {
var baseProperty: String
init(baseProperty: String) { // Určený inicializátor
self.baseProperty = baseProperty
}
}
class DerivedClass: BaseClass {
var derivedProperty: Int
init(baseProperty: String, derivedProperty: Int) { // Určený inicializátor
self.derivedProperty = derivedProperty
super.init(baseProperty: baseProperty) // Volání určeného inicializátoru rodiče
}
convenience init(baseProperty: String) { // Pohodlný inicializátor
self.init(baseProperty: baseProperty, derivedProperty: 0) // Delegace na vlastní určený inicializátor
}
convenience init() { // Pohodlný inicializátor
self.init(baseProperty: "Default Base", derivedProperty: -1) // Delegace na vlastní určený inicializátor
}
}