> Что выведется в консоли при вызове двух одинаковых функций в протоколе с табличной диспетчеризацией (iOS, Swift)

Уровень: senior · Роль: mobile · Категория: Технические вопросы

Компании: Московская биржа

Стек: iOS, Swift

> Пример ответа

При табличной диспетчеризации (table dispatch) в Swift для протоколов, если два разных типа реализуют одну и ту же функцию протокола, в консоль выведется результат вызова реализации, соответствующей динамическому типу объекта.

Пример:

SWIFT
protocol 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), и вывод был бы другим.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью