Ответ
Да, протоколы в 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).