Ответ
Класс — это конкретный ссылочный тип, который определяет свойства, методы, инициализаторы и может создавать экземпляры. Поддерживает наследование.
Протокол — это абстрактный тип, описывающий контракт (требуемые свойства и методы), но не предоставляющий их реализацию. Определяет что должно быть, но не как.
Ключевые различия:
- Реализация: Класс предоставляет реализацию, протокол — только требования.
- Наследование: Класс поддерживает одиночное наследование. Протокол поддерживает множественное принятие (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