Какой вывод появится в консоли?

Вывод — C: через переменную типа Test вызывается собственная реализация требования test() у Cat.

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

Что ответить на собеседовании

Вывод — C: через переменную типа Test вызывается собственная реализация требования test() у Cat.

Подробный разбор

Ответ с пояснениями

Условие

Определите, какой текст будет выведен в консоль и объясните причину.


protocol Test {
    func test()
}

extension Test {
    func test() { 
        print("A") 
    }
}

struct Cat: Test {
    func test() { 
        print("C") 
    }
}

var a: Test = Cat()
a.test()  

Ответ

Вывод — C: через переменную типа Test вызывается собственная реализация требования test() у Cat.

Метод присутствует в объявлении протокола, поэтому соответствие Cat хранит способ вызвать его реализацию. Наличие одноимённого метода в extension не заставляет existential-переменную игнорировать реализацию конкретного типа. Extension предоставляет default для случаев, где тип не реализует требование. Важна именно строка func test() внутри protocol Test: если оставить метод только в расширении, правила выбора изменятся.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее