Какие ключевые слова используются для членов типа (type-level members) в Swift?

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

Ответ

В Swift для объявления членов, принадлежащих самому типу, а не его экземплярам, используются ключевые слова static и class.

Ключевое слово Применимо к Переопределение в подклассе Назначение
static Структуры, перечисления, классы Невозможно Объявление статических свойств и методов. Для классов создает final член.
class Только классы Возможно Объявление методов класса, которые могут быть переопределены в подклассах. Неприменимо к свойствам (используйте class var с вычисляемыми свойствами).

Примеры:

// Для структур и перечислений — только static
struct MathUtils {
    static let pi = 3.14159
    static func square(_ x: Double) -> Double { return x * x }
}

let area = MathUtils.pi * MathUtils.square(5.0)

// Для классов — static и class
class Vehicle {
    // Статическое свойство (не переопределяется)
    static var count: Int = 0

    // Метод класса (можно переопределить)
    class func description() -> String {
        return "A generic vehicle."
    }

    // Статический метод (нельзя переопределить, эквивалентно 'final class')
    static func maxLegalSpeed() -> Int {
        return 120
    }
}

class Car: Vehicle {
    // Переопределение class метода
    override class func description() -> String {
        return "A car."
    }
    // Переопределить static func maxLegalSpeed() — НЕЛЬЗЯ
}

Итог: Используйте static по умолчанию для членов типа. Ключевое слово class применяйте в классах только для тех методов, которые должны поддерживать полиморфизм.