В чем разница между классом и протоколом в Swift?

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

Ответ

Класс — это конкретный ссылочный тип, который определяет свойства, методы, инициализаторы и может создавать экземпляры. Поддерживает наследование.

Протокол — это абстрактный тип, описывающий контракт (требуемые свойства и методы), но не предоставляющий их реализацию. Определяет что должно быть, но не как.

Ключевые различия:

  • Реализация: Класс предоставляет реализацию, протокол — только требования.
  • Наследование: Класс поддерживает одиночное наследование. Протокол поддерживает множественное принятие (conformance).
  • Типы: Протокол могут принимать (adopt) классы, структуры (struct) и перечисления (enum). Класс — это самостоятельный тип.
  • Использование: Протоколы используются для определения интерфейсов и полиморфизма на основе протоколов (Protocol-Oriented Programming).

Пример:

// Протокол определяет требование
protocol Drawable {
    func draw()
}

// Класс предоставляет конкретную реализацию
class Circle: Drawable {
    func draw() {
        print("Drawing a circle")
    }
}

// Использование протокола как типа
let shape: Drawable = Circle()
shape.draw() // Output: Drawing a circle