Можно ли реализовать протоколы в Swift?

«Можно ли реализовать протоколы в Swift?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, протоколы в Swift можно реализовать (conform) в классах, структурах и перечислениях. Это делается либо через прямое объявление в определении типа, либо с помощью расширений (extension).

Пример реализации:

protocol Flyable {
    func fly()
}

// Прямое объявление в структуре
struct Bird: Flyable {
    func fly() {
        print("Птица летит")
    }
}

// Добавление через расширение к существующему классу
class Airplane {}

extension Airplane: Flyable {
    func fly() {
        print("Самолет летит")
    }
}

Ключевые моменты:

  • Тип может соответствовать нескольким протоколам через запятую: struct MyType: ProtocolA, ProtocolB.
  • Если протокол требует инициализатор, класс должен пометить его как required (если класс не final).
  • Использование extension для реализации протокола — это best practice, так как это улучшает читаемость и организацию кода, особенно для добавления соответствия к типам, которые вы не определяли сами (например, стандартные типы Swift или UIKit).