
Opaque types vs Existential Types vs Generics
LolaChernysheva 5 минут назад Opaque types vs Existential Types vs Generics Средний 7 мин 0 iOS * Xcode * Swift * Обзор Из песочницы Привет! Сегодня хочу поделиться, как мне кажется, очень полезной информацией о такой...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. LolaChernysheva 5 минут назад Opaque types vs Existential Types vs Generics Средний 7 мин 0 iOS * Xcode * Swift * Обзор Из песочницы Привет! Сегодня хочу поделиться, как мне кажется, очень полезной информацией о такой важной теме, как Opaque types vs Existensial Types vs Generics — что это такое, в чём разница и что выбрать. Я действительно считаю эту тему важной, поскольку это мощнейшие инструменты, которые нам даёт swift, чтобы сделать код более гибким, поддерживаемым, универсальным и без лишнего дублирования.
Opaque typesЗаглянем в официальную документацию: Hide implementation details about a value’s type. Скрыть детали реализации типа значения. A function or method that returns an opaque type hides its return value’s type information.
Технические детали
Instead of providing a concrete type as the function’s return type, the return value is described in terms of the protocols it supports. Opaque types preserve type identity — the compiler has access to the type information, but clients of the module don’t. Функция или метод, возвращающие непрозрачный тип, скрывают информацию о типе возвращаемого значения.
Вместо указания конкретного типа в качестве возвращаемого типа функции возвращаемое значение описывается через протоколы, которым оно соответствует. Непрозрачные типы сохраняют идентичность типа: компилятор имеет доступ к информации о типе, но клиенты модуля — нет. Вроде всё понятно, но немного размыто.
protocol final class final class func makePet() -> some let pet = makePet() print(pet. makeSound()) // MeowПервое, на что стоит обратить внимание, — это ключевое слово some. Именно оно указывает, что перед нами opaque type.
Отраслевые последствия
Давайте посмотрим, какой тип имеет переменная pet. 3… 2… 1…Скрытый текстСигнатура функции не показывает, что она возвращает Cat. Мы знаем только, что она возвращает некоторый тип, соответствующий протоколу Animal.
Однако для компилятора этот конкретный тип фиксирован — в данном случае это всегда Cat. Другими словами, конкретный тип скрыт от вызывающего кода. func makePet() -> some Animal { if Bool.
random() { Cat() } }Это скомпилируется? Потому что это означает, что существует только один конкретный тип. Мы не можем возвращать разные типы в зависимости от условия.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





