Sobes.tech
Middle

Каква е разликата между conventions и designated?

sobes.tech AI

Отговор от AI

Инициализаторите за удобство са вторични, те могат да извикват само други инициализатори от същия клас, като в крайна сметка делегират извикването към определен инициализатор. Те се използват за добавяне на удобни начини за създаване на екземпляри.

Определените инициализатори са основните, те гарантират пълната инициализация на всички съхранявани свойства на класа (свои и на родителския). Те могат да извикват определени инициализатори на родителския клас. Всеки клас трябва да има поне един определен инициализатор.

class BaseClass {
    var baseProperty: String

    init(baseProperty: String) { // Определен инициализатор
        self.baseProperty = baseProperty
    }
}

class DerivedClass: BaseClass {
    var derivedProperty: Int

    init(baseProperty: String, derivedProperty: Int) { // Определен инициализатор
        self.derivedProperty = derivedProperty
        super.init(baseProperty: baseProperty) // Вика определен инициализатор на родителя
    }

    convenience init(baseProperty: String) { // Инициализатор за удобство
        self.init(baseProperty: baseProperty, derivedProperty: 0) // Делегира към собствен определен инициализатор
    }

    convenience init() { // Инициализатор за удобство
        self.init(baseProperty: "Default Base", derivedProperty: -1) // Делегира към собствен определен инициализатор
    }
}