protocol SomeProtocol {}

any SomeProtocol — existential-параметр; some SomeProtocol в аргументе — сокращённый generic. В старом допустимом синтаксисе голый SomeProtocol тоже означает existential.

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

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

any SomeProtocol — existential-параметр; some SomeProtocol в аргументе — сокращённый generic. В старом допустимом синтаксисе голый SomeProtocol тоже означает existential.

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

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

Условие

protocol SomeProtocol {}

func test1_1(value: SomeProtocol) {} func test2_1(value: some SomeProtocol) {}

func test1_2(value: any SomeProtocol) {}

Ответ

any SomeProtocol — existential-параметр; some SomeProtocol в аргументе — сокращённый generic. В старом допустимом синтаксисе голый SomeProtocol тоже означает existential.

func test2_1(value: some SomeProtocol) по смыслу аналогична func test2_1<T: SomeProtocol>(value: T): конкретный тип выбирает вызывающая сторона для каждого вызова. Это не тот же случай, что some в возвращаемом типе, где тип выбирает реализация.

any SomeProtocol явно обозначает контейнер значения произвольного соответствующего типа. Требование писать any вместо голого имени зависит от языкового режима и включённых возможностей. Поскольку протокол в примере пустой, различие видно главным образом в типизации API, а не в доступных методах.

Источник: raw.githubusercontent.com.

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

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

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

Подробнее