> Что будет выведено при вызове метода из экстеншена класса и протокола в Swift (iOS, Swift)
Уровень: senior · Роль: mobile · Категория: Технические вопросы
Компании: 2GIS
Стек: iOS, Swift
> Пример ответа
При вызове метода из экстеншена класса и протокола в Swift результат зависит от того, как объявлен метод: статически или динамически.
Если метод объявлен только в экстеншене протокола (без указания в основном объявлении протокола), то он вызывается статически на основе типа переменной (compile-time dispatch). Если метод объявлен в самом протоколе (как требование), то вызывается динамически на основе реального типа объекта (runtime dispatch).
Пример:
SWIFTprotocol MyProtocol {func dynamicMethod() // объявлен в протоколе}extension MyProtocol {func dynamicMethod() { print("Протокол: dynamicMethod") }func staticMethod() { print("Протокол: staticMethod") } // только в экстеншене}class MyClass: MyProtocol {func dynamicMethod() { print("Класс: dynamicMethod") }func staticMethod() { print("Класс: staticMethod") }}let obj: MyProtocol = MyClass()obj.dynamicMethod() // Вывод: "Класс: dynamicMethod" (динамическая диспетчеризация)obj.staticMethod() // Вывод: "Протокол: staticMethod" (статическая диспетчеризация)
Таким образом, при вызове метода из экстеншена протокола (без объявления в протоколе) будет вызвана реализация из экстеншена, даже если класс имеет свою версию. А при вызове метода, объявленного в протоколе, будет вызвана реализация класса.
> Похожие задачи по mobile
Как работает reduce в Swift
В чем разница последовательной и параллельной очереди
Почему в Swift используется camelCase, а на бэке snake_case
Какой метод UITableView используется для dequeue ячейки
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью