Можно ли в extention определять хранимые свойства

«Можно ли в extention определять хранимые свойства» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, в расширениях (extensions) нельзя определять хранимые свойства (stored properties), только вычисляемые (computed properties). Это ограничение связано с тем, что расширения не могут изменять структуру типа, а хранимые свойства требуют выделения памяти.

Пример:

extension UIView {
    // Вычисляемое свойство - допустимо
    var screenWidth: CGFloat {
        return UIScreen.main.bounds.width
    }

    // Ошибка: Хранимые свойства не поддерживаются
    // var tagString: String = "" 
}

Однако можно использовать ассоциированные объекты (associated objects) через Objective-C runtime для имитации хранимых свойств в расширениях.