Ответ
В 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 применяйте в классах только для тех методов, которые должны поддерживать полиморфизм.