Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

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

Что такое witness table и где она используется?

Вопрос проверяет понимание того, как Swift реализует протоколы и полиморфизм без наследования.

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

Witness table — это таблица, которая связывает конкретный тип с реализациями требований протокола. Когда тип соответствует протоколу, компилятор создаёт такую таблицу. Через неё Swift понимает, какие функции вызывать при работе с протоколом. Это основной механизм вызова методов у протоколов. Он используется вместо vtable для value-типов и протоколов.

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

Swift использует witness table для реализации протоколов, чтобы обеспечить полиморфизм без классового наследования. Это особенно важно для структур и перечислений.

Определение

Witness table — это таблица соответствия, которая содержит реализации всех требований протокола для конкретного типа.

Зачем она нужна

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

  1. Протокол описывает, что должно быть реализовано

  2. Конкретный тип реализует эти требования

  3. Компилятор создаёт witness table

  4. При вызове метода через протокол Swift обращается к этой таблице

Пример

protocol Flyable {
    func fly()
}

struct Bird: Flyable {
    func fly() {
        print("Bird flies")
    }
}

func makeFly(_ object: Flyable) {
    object.fly()
}

Когда fly() вызывается через Flyable, Swift:

  • получает witness table для Bird

  • находит реализацию fly

  • вызывает её

Где используется

  • Протоколы

  • Generics с ограничениями

  • Value-типы (struct, enum)

  • Protocol-oriented programming

Отличие от vtable

  • vtable — для классов и наследования

  • witness table — для протоколов и соответствия

Вывод

Witness table — ключевой механизм Swift для работы с протоколами. Его стоит понимать при проектировании архитектуры на основе протоколов и generics.

  • Аватар

    iOS Guru

    Roman Isakov

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

Уровень

  • Рейтинг:

    5

  • Сложность:

    8

Навыки

  • Swift

    Swift

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

#witness

#table

#protocol

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

  • Аватар

    iOS Guru

    Roman Isakov

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