Skip to content

Protocol

Попов Эльдар edited this page Sep 2, 2021 · 4 revisions

Protocol - интерфейс для общения

  1. ✔️ 100 Days of SwiftUI. Day 11

Протоколы позволяют нам определять минимально необходимую функциональность, как должны работать структуры, классы и перечисления, но не предоставляют внутренний код

Мы не можем создавать экземпляры этого протокола - это описание того, что мы хотим, а не то, что мы можем создать и использовать напрямую В swift невозможно создавать свойства протоколу, которые будут только { set }

встроенные протоколы

Equatable (==) - это на самом деле не встроено в Swift или что-то еще. Любые два, любой класс может использовать ==, если вы реализуете этот протокол. Таким образом, этот протокол необходим для работы Hashable, но он также заставляет работать оператор ==.

Comparable (>/<) - этот тип можно проверить, чтобы узнать, больше ли он или меньше, чем у другого экземпляра того же типа

CaseIterable - Swift сгенерирует специальное allCases свойство массива для вашего перечисления, которое будет содержать все случаи в том порядке, в котором они были определены

Identifiable (ForEach(array, id: \.id) - UUID) - уникальный

C enumerated нужно будет использовать id: \.element или id: \.offset (вместо id: .id), поскольку эти два модификатора используются с кортежами.

Hashable

  1. ✔️ CaseIterable

Вместо того, чтобы копировать всю функциональность Equatable в Comparable, Swift просто использует наследование протоколов, чтобы наследовать Comparable от Equatable

Protocol inheritance

  1. ✔️ Protocol inheritance
  2. ✔️ When should we use protocol inheritance?

Вы можете создавать протоколы поверх других протоколов, аналогично классам.

В отличие от классов, вы можете наследовать сразу от нескольких протоколов, прежде чем добавлять свои собственные настройки поверх них.

Protocol-oriented programming (POP)

  1. ✔️ Protocol extensions
  2. ✔️ When are protocol extensions useful in Swift?
  3. ✔️ Protocol-oriented programming
  4. ✔️ !!!How is protocol-oriented programming different from object-oriented programming?
  5. WWDC15: Protocol-Oriented Programming in Swift

Протокольное программирование - это попытка уйти от наследования

Вы можете написать расширения для встроенных протоколов Swift, таких как Identifiable или для типов (Int)