Ответ
Ключевое слово static в Swift объявляет члены типа (свойства и методы), которые принадлежат самому типу, а не какому-либо его экземпляру. Доступ к ним осуществляется через имя типа.
Основное использование:
class Logger {
// Статическое свойство — общее для всего типа (аналог "классовой переменной")
static let shared = Logger()
static var logLevel: LogLevel = .info
// Статический метод — вызывается на типе, а не на экземпляре
static func log(_ message: String) {
print("[\(logLevel)] \(message)")
}
private init() {} // Скрытый конструктор для синглтона
}
// Использование БЕЗ создания экземпляра класса Logger
Logger.logLevel = .debug
Logger.log("Приложение запущено") // Вывод: [debug] Приложение запущено
let loggerInstance = Logger.shared // Доступ к синглтону через static свойство
Важные детали:
- В классах: Объявление с
staticявляется синонимомfinal class. Такие члены не могут быть переопределены в подклассах.class Vehicle { static func description() { print("Транспортное средство") } class func adjustableDescription() { print("Настраиваемое описание") } // Можно переопределить } class Car: Vehicle { // override static func description() { } // Ошибка компиляции: нельзя переопределить override class func adjustableDescription() { print("Автомобиль") } // OK } - В структурах и перечислениях:
staticиспользуется без ограничений, так как эти типы не поддерживают наследование. - Область видимости: Статические свойства инициализируются лениво и гарантированно один раз (потокобезопасно), что делает их удобными для реализации синглтонов и shared-ресурсов.