Ответ
Extension (расширение) в Swift позволяет добавлять новую функциональность к существующему классу, структуре, перечислению или протоколу без изменения их исходного кода и без использования наследования.
Что можно добавлять в extension:
- Вычисляемые свойства (computed properties).
- Методы (экземпляра и типа).
- Новые инициализаторы (convenience init).
- Сабскрипты.
- Вложенные типы.
- Реализацию протоколов.
Пример:
extension String {
// Добавляем метод экземпляра
var isPalindrome: Bool {
let cleaned = self.lowercased().filter { $0.isLetter }
return cleaned == String(cleaned.reversed())
}
// Добавляем метод типа (static)
static func random(length: Int) -> String {
let letters = "abcdefghijklmnopqrstuvwxyz"
return String((0..<length).map{ _ in letters.randomElement()! })
}
}
print("radar".isPalindrome) // true
print(String.random(length: 5)) // "kqdjp"
Строгие ограничения extensions:
- Нельзя добавлять хранимые свойства (stored properties).
- Нельзя добавлять property observers к существующим свойствам.
- Нельзя переопределять существующую функциональность (для этого нужно использовать наследование в классах).
- Нельзя добавлять designated инициализаторы в классах, только convenience.
Практическое применение: Организация кода, разделение реализации протоколов, добавление вспомогательных методов к системным типам.