> Что выведется в консоли при вызове двух одинаковых функций в протоколе с табличной диспетчеризацией (iOS, Swift)
Уровень: senior · Роль: mobile · Категория: Технические вопросы
Компании: Московская биржа
Стек: iOS, Swift
> Пример ответа
При табличной диспетчеризации (table dispatch) в Swift для протоколов, если два разных типа реализуют одну и ту же функцию протокола, в консоль выведется результат вызова реализации, соответствующей динамическому типу объекта.
Пример:
SWIFTprotocol Drawable {func draw()}class Circle: Drawable {func draw() { print("Circle") }}class Square: Drawable {func draw() { print("Square") }}let shapes: [Drawable] = [Circle(), Square()]for shape in shapes {shape.draw()}
Вывод:
Circle Square
Табличная диспетчеризация использует виртуальную таблицу (vtable) для каждого типа, поэтому при вызове draw() через протокол Drawable среда выполнения определяет фактический тип объекта (Circle или Square) и вызывает его реализацию. Если бы функция была объявлена с ключевым словом final или не входила в протокол, диспетчеризация могла бы быть прямой (static dispatch), и вывод был бы другим.
> Похожие задачи по mobile
Как реализовать функцию, которая возвращает nil или значение из словаря
Какие подходы по обеспечению безопасности мобильного приложения и инфраструктуры применить
Что такое паттерн use case
Что такое диплинкинг в iOS
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью