0Pricing
Swift Academy · Урок

Композиция протоколов с помощью &

Объединяйте несколько протоколов в одно требование к типу.

«Композиция протоколов с помощью &» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Введение

Композиция протоколов позволяет объединить несколько протоколов в одно требование к типу с помощью `&`. Это ответ Swift на множественное наследование.

Основы композиции

```swift protocol Named { var name: String { get } } protocol Aged { var age: Int { get } } func describe(_ entity: Named & Aged) { print("\(entity.name) is \(entity.age)") } ``` `Named & Aged` — это временное требование к типу, а не новый протокол.

Использование в параметрах функций

```swift protocol Drawable { func draw() } protocol Animatable { func animate() } func render(_ view: Drawable & Animatable) { view.draw() view.animate() } ```

Хранение составных типов

```swift var entity: Named & Aged = makePerson() entity.name // accessible entity.age // accessible ``` Тип переменной ограничивает доступные члены протоколов.

Композиция с классами

```swift protocol Configurable { func configure() } func setup(_ vc: T) { vc.configure() present(vc, animated: true) } ``` Объединяйте требование к классу с протоколом с помощью `&` в обобщённых типах.

Композиция протоколов и новый протокол

```swift // Don't create a new protocol just to combine: protocol NamedAndAged: Named, Aged {} // often unnecessary // Prefer inline composition at use sites: func describe(_ e: Named & Aged) { } ``` Новые протоколы имеют смысл только тогда, когда для этой комбинации нужны методы расширения.

Псевдоним типа для длинных композиций

```swift typealias Service = Authenticable & Cacheable & Loggable func process(service: Service) { service.authenticate() service.log("processing") } ``` Используйте `typealias`, чтобы давать имена часто используемым композициям.

Композиция в ограничениях обобщённых типов

```swift func fetchAndCache(_ resource: T) async throws { let data = try await resource.fetch() resource.cache(data) } ```

Наследование протоколов и композиция

• Наследование: `protocol C: A, B {}` — C наследует все требования A и B • Композиция: `A & B` — встраивается непосредственно и не создаёт новый тип Используйте наследование, когда все соответствующие типы должны удовлетворять обоим протоколам; композицию — в местах вызова.

Практический пример: делегат и источник данных

```swift func setup(_ vc: UITableViewDelegate & UITableViewDataSource) { tableView.delegate = vc tableView.dataSource = vc } ``` Один контроллер представления часто удовлетворяет обоим протоколам — композиция позволяет лаконично это выразить.

Быстрая проверка

Какой оператор объединяет несколько протоколов в одно требование к типу?

Итоги

Основные выводы: • `Protocol1 & Protocol2` — встроенная композиция • Используйте её в параметрах, возвращаемых типах и ограничениях обобщённых типов • `typealias` позволяет называть часто используемые композиции • Предпочитайте композицию созданию новых протоколов с пустым телом • Можно объединять её с требованиями к классу: `UIViewController & MyProtocol` Далее: условное соответствие протоколам.

Часто задаваемые вопросы

Урок «Композиция протоколов с помощью &» бесплатный?

Да — полный текст урока «Композиция протоколов с помощью &» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Композиция протоколов с помощью &»?

Объединяйте несколько протоколов в одно требование к типу. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Композиция протоколов с помощью &»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Композиция протоколов с помощью &
  2. Условное соответствие протоколам
  3. Требования Self и проектирование Equatable
  4. Принципы проектирования на основе протоколов
← Назад к Swift Academy