Ответ
В Swift переменные уровня класса — это вычисляемые свойства. Они не хранят значение напрямую, а возвращают его при каждом обращении.
Объявление:
class MyClass {
// Статическое свойство (не переопределяется)
static var sharedConstant: Int {
return 42
}
// Ключевое слово `class` позволяет переопределение в подклассах
class var overridableValue: String {
return "Base"
}
}
class SubClass: MyClass {
override class var overridableValue: String {
return "Subclass"
}
}
Особенности и ограничения:
- Только вычисляемые: Не могут быть хранимыми (
stored properties) на уровне класса. - Потокобезопасность: Не гарантирована по умолчанию. Если свойство изменяемое (с сеттером), необходимо реализовать синхронизацию.
- Ленивая инициализация: Вычисляется при первом обращении.
Альтернативы для хранения состояния:
- Статические хранимые свойства в структурах или перечислениях:
enum AppSettings { static var apiKey: String = "default" // Хранимое свойство } - Синглтон: Для сложного состояния и инкапсуляции логики инициализации.