Разница между some и any в Swift
Вопрос
Чем func makeShape() -> some Shape отличается от func makeShape() -> any Shape?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Ничем:
someэто устаревший синонимany, оставленный для SwiftUI someразрешает возвращать разные типы в разных ветках функцииsomeскрывает один конкретный тип, аanyэто коробка для любого типаправильный ответanyработает быстрее, потому что не требует специализации кода
Разбор
Opaque-тип some Shape означает «конкретный тип, который я не называю»: функция всегда возвращает один и тот же тип, компилятор его знает и может оптимизировать. Поэтому вернуть Circle в одной ветке и Square в другой нельзя. any Shape это existential: значение упаковывается в контейнер, методы вызываются через witness table, типы могут быть разными. Обычно any медленнее, а не быстрее. some не устарел, это основа SwiftUI (some View).
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Требование Self в протоколе
Следующий вопрос
Протокольно-ориентированное программирование в Swift
Термины по теме
Ещё по теме «Протоколы, POP и дженерики»
- Протокол делегата и weak
- Протокол с associatedtype как тип параметра
- Условное соответствие протоколу
- Метод из расширения протокола: какая реализация вызовется
- Ограничение дженерика Comparable
- Как ускорить вызов методов класса
- Что такое associatedtype
- Виды диспетчеризации в Swift