-
Notifications
You must be signed in to change notification settings - Fork 2
Protocol
Протоколы позволяют нам определять минимально необходимую функциональность, как должны работать структуры, классы и перечисления, но не предоставляют внутренний код
Мы не можем создавать экземпляры этого протокола - это описание того, что мы хотим, а не то, что мы можем создать и использовать напрямую В swift невозможно создавать свойства протоколу, которые будут только { set }
Equatable (==) - это на самом деле не встроено в Swift или что-то еще. Любые два, любой класс может использовать ==, если вы реализуете этот протокол. Таким образом, этот протокол необходим для работы Hashable, но он также заставляет работать оператор ==.
Comparable (>/<) - этот тип можно проверить, чтобы узнать, больше ли он или меньше, чем у другого экземпляра того же типа
CaseIterable - Swift сгенерирует специальное allCases свойство массива для вашего перечисления, которое будет содержать все случаи в том порядке, в котором они были определены
Identifiable (ForEach(array, id: \.id) - UUID) - уникальный
C enumerated нужно будет использовать
id: \.element
илиid: \.offset
(вместо id: .id), поскольку эти два модификатора используются с кортежами.
Hashable
- ✔️ CaseIterable
Вместо того, чтобы копировать всю функциональность Equatable в Comparable, Swift просто использует наследование протоколов, чтобы наследовать Comparable от Equatable
Вы можете создавать протоколы поверх других протоколов, аналогично классам.
В отличие от классов, вы можете наследовать сразу от нескольких протоколов, прежде чем добавлять свои собственные настройки поверх них.
- ✔️ Protocol extensions
- ✔️ When are protocol extensions useful in Swift?
- ✔️ Protocol-oriented programming
- ✔️ !!!How is protocol-oriented programming different from object-oriented programming?
- ❎ WWDC15: Protocol-Oriented Programming in Swift
Протокольное программирование - это попытка уйти от наследования
Вы можете написать расширения для встроенных протоколов Swift, таких как Identifiable или для типов (Int)