any SomeProtocol — existential-параметр; some SomeProtocol в аргументе — сокращённый generic. В старом допустимом синтаксисе голый SomeProtocol тоже означает existential.
protocol SomeProtocol {}
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.