Какие значения и концепции в Swift описывает ключевое слово `static`?

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

Ответ

В Swift static применяется в нескольких контекстах, объединённых идеей принадлежности к типу, а не к экземпляру:

  1. Статические члены типа (Static Type Members): Свойства и методы, принадлежащие самому типу (классу, структуре, перечислению). Для доступа используется имя типа.

    struct MathUtils {
        static let pi = 3.14159
        static func square(_ x: Double) -> Double { return x * x }
    }
    print(MathUtils.pi) // 3.14159
  2. Статические переменные внутри функций (Static Local Variables): Переменная, время жизни которой совпадает с временем жизни программы. Её значение сохраняется между вызовами функции.

    func uniqueIdentifier() -> Int {
        static var counter = 0 // Инициализируется один раз
        counter += 1
        return counter
    }
    uniqueIdentifier() // 1
    uniqueIdentifier() // 2
  3. Статическая диспетчеризация (Static Dispatch): Механизм, при котором компилятор определяет, какой метод будет вызван, на этапе компиляции. Это приводит к лучшей производительности по сравнению с динамической диспетчеризацией.

Ключевые синонимы/понятия: "принадлежащий типу", "глобальная область видимости в рамках типа", "сохраняющий состояние между вызовами".