Вопрос проверяет понимание динамической диспетчеризации методов и полиморфизма в Swift.
Если метод объявлен в протоколе, используется динамическая диспетчеризация.
Будет вызвана реализация конкретного типа.
Поведение зависит от реального объекта, а не от типа переменной.
Это позволяет использовать полиморфизм.
Когда метод объявлен в самом протоколе, он становится обязательным требованием.
Метод-протокольное требование — это метод, который обязан быть реализован типом, соответствующим протоколу.
protocol Logger {
func log()
}
extension Logger {
func log() {
print("default log")
}
}
struct FileLogger: Logger {
func log() {
print("struct log")
}
}
let logger: Logger = FileLogger()
logger.log()
Результат:
struct log
Метод входит в контракт протокола
Используется динамическая диспетчеризация
Выбор реализации происходит во время выполнения
Если тип не реализует метод, используется реализация из extension.
Методы, объявленные в протоколе, поддерживают полиморфизм. Это ключевой механизм построения гибкой архитектуры в Swift.