Заметки
• Аналог интерфейса в Java (контракт)
• Протокол могут реализовать class, struct, enum (можно ограничить, чтобы например могли реализовывать только классы)
• Компилятор следит, чтобы все требования протокола были выполнены в соотв. реализациях
Свойства
• В Java в интерфейсах нужно было прописывать get или set, чтобы обязать классы иметь определенное свойство - в
Swift это реализовано более правильно
• В протоколе:
• нельзя указывать просто переменные, нужно computed properties
• нельзя задавать значения по-умолчанию для переменных
Протокол как тип
• Протокол может быть типом:
• Переменной/константы
• Элемента в коллекции
• Параметров метода, возвращаемого значения
• …
• Везде, где можно указывать тип
• Если тип переменной является протоколом - это отражается на свойствах (read-only или read-write)
Протокол
• Протокол может расширяться от другого протокола
• Используйте struct, если вам не нужно наследование, а просто нужно создать объект, который может реализовать
любое количество протоколов
Домашнее задание
• Прочитать:
• https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html