some Protocol и any Protocol — это два различных способа работы с протоколами в Swift, каждый служит своей цели.
some — Непрозрачные типыfunc makeShape() -> some Shape { Circle() }
any — Экзистенциальные типыlet shapes: [any Shape] = [Circle(), Rectangle()]
some требует одного конкретного типа для каждого использования; any позволяет смешивать типыsome разрешается на этапе компиляции; any разрешается на этапе выполненияsome быстрее; any вносит накладные расходы на косвенностьsome — отдавай ему предпочтение для возвращаемых типов и параметров функций, когда тип согласованany только когда тебе действительно нужна гибкость типов, например для разнородных коллекций или когда конкретный тип меняется во время выполненияSwift 5.7+ требует явно писать any для экзистенциальных типов, делая компромисс в производительности намеренно видимым для разработчика.
Ключевое слово some позволяет функции возвращать разные конкретные типы при разных вызовах, если они все соответствуют одному протоколу.
Новый — ещё не проверен сообществом
Вы