Чем отличается convenience от designated?
Этот вопрос проверяет понимание различий между вспомогательными (convenience) и основными (designated) инициализаторами в Swift.
Короткий ответ
Designated — это основной инициализатор, который полностью инициализирует все свойства объекта и вызывает инициализатор суперкласса (если это класс). Convenience — это вспомогательный инициализатор, который вызывает другой инициализатор того же класса, чтобы упростить создание объекта.
Длинный ответ
Designated инициализаторы:
Это основные инициализаторы класса, которые должны инициализировать все свойства и вызывать инициализатор суперкласса, если класс наследуется. Каждый класс должен иметь хотя бы один designated инициализатор.
Пример:
class Person {
var name: String
var age: Int
init(name: String, age: Int) { // designated
self.name = name
self.age = age
}
}Convenience инициализаторы:
Convenience инициализаторы используются для создания дополнительных способов инициализации объекта. Они должны обязательно вызывать другой инициализатор того же класса.
Пример:
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
convenience init(name: String) { // convenience
self.init(name: name, age: 0)
}
}
let person = Person(name: "Alice")Правила:
- Convenience инициализаторы должны вызывать другой инициализатор того же класса.
- Designated инициализаторы могут вызывать только инициализаторы суперкласса или инициализировать свойства.
Используйте designated для полной инициализации объекта, а convenience — для упрощения и создания дополнительных вариантов инициализации.