Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Swift : protocol, extension

Какой метод вызовется, если метод объявлен только в extension протокола?

Вопрос проверяет понимание статической и динамической диспетчеризации методов в Swift.

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

Если метод объявлен только в extension протокола, используется реализация из этого extension.
Даже если тип имеет метод с таким же именем, он не будет вызван.
Вызов определяется на этапе компиляции.
Это называется статической диспетчеризацией.

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

Поведение методов в протоколах — одна из самых тонких тем Swift.

Определение

Метод, объявленный только в extension протокола, не является частью требований протокола.

Что происходит при вызове

Перед перечислением важно понять, через какой тип происходит вызов.

Пример

protocol Logger {}

extension Logger {
    func log() {
        print("protocol log")
    }
}

struct FileLogger: Logger {
    func log() {
        print("struct log")
    }
}

let logger: Logger = FileLogger()
logger.log()

Результат:

protocol log

Почему так происходит

  1. Метод не объявлен в протоколе

  2. Он не участвует в динамической диспетчеризации

  3. Компилятор выбирает реализацию на этапе компиляции

Важное следствие

Тип переменной (Logger) важнее конкретного объекта (FileLogger).

Краткий вывод

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

  • Аватар

    iOS Guru

    Roman Isakov

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

Уровень

  • Рейтинг:

    5

  • Сложность:

    8

Навыки

  • Swift

    Swift

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

#protocol

#extension

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

  • Аватар

    iOS Guru

    Roman Isakov

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