Ответ
В iOS/Swift термин "интерфейсный протокол" обычно относится к протоколу (protocol), который определяет контракт — набор требований (методов, свойств), которые должен реализовать conforming тип (класс, структура, перечисление).
Для чего нужны:
- Абстракция и полиморфизм: Позволяют работать с разными типами через единый интерфейс.
- Делегирование (Delegation): Классический паттерн, где один объект поручает другому выполнение задач.
- Определение требований для дженериков: Например, с помощью
where T: SomeProtocol. - Упрощение тестирования: Зависимости можно легко подменить mock-объектами, реализующими тот же протокол.
Пример:
// 1. Определение интерфейсного протокола
protocol Drawable {
func draw()
var area: Double { get }
}
// 2. Реализация протокола разными типами
struct Circle: Drawable {
var radius: Double
func draw() { print("Рисую круг") }
var area: Double { return .pi * radius * radius }
}
class Square: Drawable {
var side: Double
func draw() { print("Рисую квадрат") }
var area: Double { return side * side }
}
// 3. Использование через общий интерфейс
let shapes: [Drawable] = [Circle(radius: 5), Square(side: 4)]
for shape in shapes {
shape.draw()
print("Площадь: (shape.area)")
}
Итог: Протоколы в Swift — это мощный механизм для определения четких интерфейсов, повышающий гибкость, переиспользуемость и тестируемость кода.