protocol SomeProtocol {}

any SomeProtocol явно обозначает existential. В режиме, допускающем неявные existential-типы, SomeProtocol в параметре имеет тот же смысл.

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

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

any SomeProtocol явно обозначает existential. В режиме, допускающем неявные existential-типы, SomeProtocol в параметре имеет тот же смысл.

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

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

Условие

protocol SomeProtocol {}

func test1_1(value: SomeProtocol) {} func test1_2(value: any SomeProtocol) {}

Ответ

any SomeProtocol явно обозначает existential. В режиме, допускающем неявные existential-типы, SomeProtocol в параметре имеет тот же смысл.

Оба параметра допускают значения разных типов, соответствующих протоколу; это не универсальный параметр T: SomeProtocol, выбираемый для каждого вызова. Ключевое слово any делает упаковку в existential явной. Допустимость первого объявления зависит от версии языка и включённых language features, поэтому нельзя объявлять его безусловной ошибкой во всех сборках. Если нужна статическая generic-абстракция, используют func test<T: SomeProtocol>(value: T) либо соответствующий синтаксис opaque-параметра.

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

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

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

Подробнее