Ответ
Расширения протоколов (extension Protocol) позволяют добавлять реализацию по умолчанию для методов, вычисляемых свойств, сабскриптов и инициализаторов, не изменяя исходное объявление протокола.
Основные цели:
- Реализация по умолчанию: Типы, соответствующие протоколу, автоматически получают эту реализацию, но могут её переопределить.
- Расширение существующих протоколов: Добавление нового функционала к протоколам из стандартной библиотеки или сторонних фреймворков.
- Ограничение расширений: Добавление методов только для определённых типов с помощью условия
where.
Пример:
protocol Renderable {
func draw()
}
// Добавляем реализацию по умолчанию
extension Renderable {
func draw() {
print("Rendering a default shape.")
}
// Добавляем новый метод ко всем соответствующим типам
func highlight() {
print("Shape is highlighted.")
}
}
struct Circle: Renderable {} // Автоматически получает draw() и highlight()
Circle().draw() // Вывод: "Rendering a default shape."
struct Square: Renderable {
func draw() { // Переопределение реализации по умолчанию
print("Rendering a square.")
}
}