Встречается на 27% собеседований по Mobile

Какие есть два типа инициализаторов

Существуют два основных типа инициализаторов: обозначенные (Designated) и вспомогательные (Convenience). Эти типы инициализаторов играют важную роль в процессе инициализации экземпляров классов, помогая управлять процессом создания объектов с корректным начальным состоянием.

Обозначенные инициализаторы (Designated Initializers)

Являются основными инициализаторами класса. Они полностью инициализируют все свойства, введённые классом, и вызывают соответствующий инициализатор суперкласса, чтобы продолжить процесс инициализации вверх по иерархии наследования.

Каждый класс должен иметь хотя бы один обозначенный инициализатор. В некоторых случаях это может быть инициализатор, унаследованный от суперкласса.

Пример:

text
```swift
class Person {
    var name: String
    var age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}
```

В этом примере `init(name: String, age: Int)` является обозначенным инициализатором для класса `Person`, который инициализирует все свойства класса.

Вспомогательные инициализаторы (Convenience Initializers)

Являются второстепенными, удобными инициализаторами, которые можно определить в классе для предоставления дополнительных опций для создания экземпляра класса, используя некоторые значения по умолчанию или другую простую логику инициализации. Вспомогательные инициализаторы всегда вызывают обозначенный инициализатор того же класса (непосредственно или косвенно), обеспечивая таким образом полную инициализацию объекта.

Пример:

text
```swift
class Person {
    var name: String
    var age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    
    convenience init() {
        self.init(name: "Unknown", age: 0)
    }
}
```

Здесь `convenience init()` является вспомогательным инициализатором, который предоставляет возможность создать экземпляр `Person` с некоторыми значениями по умолчанию.

Ключевые отличия

  • Обязанности: Обозначенные инициализаторы несут ответственность за полную инициализацию всех свойств, введённых классом, а также за вызов соответствующего инициализатора суперкласса. Вспомогательные инициализаторы не обязаны напрямую инициализировать все свойства, они обычно предоставляют альтернативный или упрощённый способ инициализации.
  • Вызовы: Вспомогательные инициализаторы всегда вызывают обозначенный инициализатор того же класса, в то время как обозначенные инициализаторы могут вызывать инициализаторы своего суперкласса.

Понимание этих двух типов инициализаторов важно для корректной инициализации объектов, особенно при работе с наследованием и расширением классов.

April 10, 2024, easyoffer

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы