Static, либо модификатор class?
Суть
Оба слова объявляют член типа, а не экземпляра. Разница — в переопределении:
static— член нельзя переопределить в подклассе. Единственный вариант дляstruct,enum, протоколов и для хранимых свойств типа.class— только в классах; член можноoverrideв подклассе. Допустим для методов, computed properties и subscript, но не для stored properties.
Внутри класса static эквивалентен final class.
class Shape {
static let kind = "shape" // переопределить нельзя
class var name: String { "Shape" } // можно override
static func make() -> Shape { Shape() }
// class var stored = 0 // error: class stored properties not supported
}
class Circle: Shape {
override class var name: String { "Circle" }
// override static func make() — error: cannot override static method
}
struct Point {
static let zero = Point(x: 0, y: 0) // в struct/enum — только static
var x, y: Double
}
print(Circle.name, Shape.name, Shape.kind) // Circle Shape shape
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep