Вопрос проверяет понимание правил инициализации value-типов и отличий структур от классов.
В структурах Swift инициализаторы проще, чем в классах, и не поддерживают наследование. Swift автоматически генерирует инициализатор, если все свойства имеют значения или передаются через параметры. При добавлении пользовательского init стандартный инициализатор может исчезнуть. Все свойства структуры должны быть инициализированы до завершения init. Это обеспечивает безопасность value-типов.
Инициализация структур в Swift построена вокруг простоты и безопасности. Поскольку структуры не поддерживают наследование, правила инициализации у них строже и понятнее.
Инициализатор структуры — это метод init, который должен присвоить значения всем хранимым свойствам структуры.
Перед тем как разбирать пользовательские init, важно понимать, что Swift делает автоматически.
Если у всех свойств есть значения по умолчанию — доступен init()
Если есть свойства без значений — создаётся memberwise initializer
struct User {
let name: String
var age: Int
}
// init(name:age:) создаётся автоматически
Если нужен контроль над инициализацией, можно объявить свой init.
struct User {
let name: String
let isAdult: Bool
init(name: String, age: Int) {
self.name = name
self.isAdult = age >= 18
}
}
В этом случае логика инициализации становится явной.
Нет convenience init
Нет required init
Нет вызова super.init
Инициализаторы структур просты и безопасны. Их стоит использовать, когда нужна предсказуемая и лёгкая инициализация value-типов без сложных иерархий.