Что такое интерфейсный протокол (Interface Protocol) в контексте iOS/Swift?

«Что такое интерфейсный протокол (Interface Protocol) в контексте iOS/Swift?» — вопрос из категории Софт-скиллы, который задают на 22% собеседований IOS Разработчик. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

В iOS/Swift термин "интерфейсный протокол" обычно относится к протоколу (protocol), который определяет контракт — набор требований (методов, свойств), которые должен реализовать conforming тип (класс, структура, перечисление).

Для чего нужны:

  1. Абстракция и полиморфизм: Позволяют работать с разными типами через единый интерфейс.
  2. Делегирование (Delegation): Классический паттерн, где один объект поручает другому выполнение задач.
  3. Определение требований для дженериков: Например, с помощью where T: SomeProtocol.
  4. Упрощение тестирования: Зависимости можно легко подменить 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 — это мощный механизм для определения четких интерфейсов, повышающий гибкость, переиспользуемость и тестируемость кода.