any SomeProtocol явно обозначает existential. В режиме, допускающем неявные existential-типы, SomeProtocol в параметре имеет тот же смысл.
protocol 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-параметра.