Ответ
Статическое свойство (static) принадлежит самому типу (классу, структуре, перечислению), а свойство экземпляра — конкретному экземпляру этого типа.
| Критерий | Статическое свойство (static var/let) |
Свойство экземпляра (var/let) |
|---|---|---|
| Принадлежность | Типу. Существует в единственном экземпляре на весь тип. | Экземпляру. У каждого объекта — своя копия. |
| Доступ | Через имя типа: ClassName.propertyName. |
Через экземпляр: instance.propertyName. |
| Инициализация | Доступно без создания экземпляра. | Требует создания экземпляра. |
| Доступ к другим членам | Может обращаться только к другим статическим членам. | Может обращаться и к статическим, и к членам экземпляра. |
Пример:
class NetworkManager {
// Статическое свойство — общий для всех конфиг
static let timeoutInterval: TimeInterval = 30.0
static var activeRequestsCount = 0
// Свойство экземпляра — уникально для каждого менеджера
let sessionID: String
var baseURL: String
init(baseURL: String) {
self.sessionID = UUID().uuidString
self.baseURL = baseURL
NetworkManager.activeRequestsCount += 1 // Обращение к static
}
}
// Использование
print(NetworkManager.timeoutInterval) // 30.0 — доступ через тип
let manager = NetworkManager(baseURL: "https://api.example.com")
print(manager.baseURL) // "https://api.example.com" — доступ через экземпляр
print(NetworkManager.activeRequestsCount) // 1
Ключевое применение: static используется для общих констант, счетчиков, shared-инстансов (синглтонов) или конфигурации, общей для всех объектов типа.