Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Swift : default, initializer, memberwise

Почему при объявлении инициализатора в структуре пропадает дефолтный init?

Вопрос проверяет понимание правил генерации инициализаторов компилятором Swift.

Короткий ответ

Дефолтный init в структуре генерируется только если Swift может гарантировать безопасную инициализацию. Когда разработчик объявляет собственный инициализатор, компилятор считает, что ответственность за инициализацию полностью передана ему. Поэтому автоматический init удаляется. Это сделано для предотвращения частично инициализированных объектов. Такое поведение является осознанным дизайнерским решением Swift.

Длинный ответ

Swift строго контролирует инициализацию структур, чтобы исключить некорректные состояния объектов.

Определение

Дефолтный инициализатор — это автоматически сгенерированный init, который Swift добавляет, если это безопасно.

Почему он исчезает

Перед перечислением важно понимать, что компилятор не может угадать намерения разработчика.

  1. Пользовательский init может инициализировать свойства иначе

  2. Компилятор больше не уверен, что стандартный init корректен

  3. Ответственность полностью перекладывается на разработчика

struct Point {
    let x: Int
    let y: Int

    init(x: Int) {
        self.x = x
        self.y = 0
    }
}

В этом случае init(x:y:) больше не генерируется автоматически.

Как сохранить memberwise init

Можно вынести инициализатор в extension.

struct Point {
    let x: Int
    let y: Int
}

extension Point {
    init(x: Int) {
        self.x = x
        self.y = 0
    }
}

Вывод

Swift убирает дефолтный init, чтобы избежать ошибок и двусмысленностей. Если нужен и автоматический, и кастомный инициализатор, стоит использовать extension.

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • Swift

    Swift

Ключевые слова

#default

#initializer

#memberwise

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.