Вы находитесь на странице: 1из 7

PROTOCOL

Заметки
• Аналог интерфейса в Java (контракт)

• Для создания абстрактного уровня и использования всех преимуществ ООП

• Как и в Java – можно реализовывать любое количество протоколов

• Более гибкие чем Java интерфейсы, можно добавлять:


• методы
• инициализаторы (конструкторы)
• переменные
• get/set

• Протокол могут реализовать class, struct, enum (можно ограничить, чтобы например могли реализовывать только классы)

• В Swift отсутствуют абстрактные классы, которые активно используются в Java

• Компилятор следит, чтобы все требования протокола были выполнены в соотв. реализациях
Свойства
• В Java в интерфейсах нужно было прописывать get или set, чтобы обязать классы иметь определенное свойство - в
Swift это реализовано более правильно

• Слишком много протоколов создавать не нужно, только необходимые

• В протоколе:
• нельзя указывать просто переменные, нужно computed properties
• нельзя задавать значения по-умолчанию для переменных
Протокол как тип
• Протокол может быть типом:
• Переменной/константы
• Элемента в коллекции
• Параметров метода, возвращаемого значения
• …
• Везде, где можно указывать тип

• Для полиморфизма и других преимуществ ООП

• Если тип переменной является протоколом - это отражается на свойствах (read-only или read-write)
Протокол
• Протокол может расширяться от другого протокола

• Cуществует большой количество системных протоколов (по аналогии с Java)


• https://developer.apple.com/documentation/swift/basic_behaviors

• Многие системные структуры


struct
• struct тоже может использовать протоколы (как и enum – перечисление)

• В Swift почти все системные типы основаны на struct

• Используйте struct, если вам не нужно наследование, а просто нужно создать объект, который может реализовать
любое количество протоколов
Домашнее задание
• Прочитать:
• https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html