Ответ
В extension можно добавлять только вычисляемые свойства (computed properties), но нельзя добавлять хранимые свойства (stored properties). Это ограничение связано с тем, что расширения не могут изменять структуру существующего типа в памяти.
Пример вычисляемых свойств в extension:
extension Double {
var km: Double { return self * 1000.0 }
var m: Double { return self }
var cm: Double { return self / 100.0 }
}
let distance: Double = 5.0
print(distance.km) // 5000.0
Также можно добавлять статические вычисляемые свойства:
extension Int {
static var maxSafeValue: Int { Int.max / 2 }
}
Почему нельзя stored properties? Расширение не имеет места для хранения нового поля. Для эмуляции хранимых свойств в классах можно использовать механизм associated objects из Objective-C runtime, но это считается антипаттерном в чистом Swift и нарушает типобезопасность.