Чем отличается статическое (static) свойство от свойства экземпляра в Swift?

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

Ответ

Статическое свойство (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-инстансов (синглтонов) или конфигурации, общей для всех объектов типа.