Работая на языке Swift Programming, я был удивлен, увидев, что в отличие от структур и перечислений классы не поддерживают свойства хранимого типа.
Это общая особенность других языков OO, поэтому я предполагаю, что была хорошая причина, по которой они решили не допускать этого. Но я не могу догадаться, что это за причина, тем более что у них есть структуры (и перечисления).
Это просто, что это было раннее время для Swift, и оно еще не реализовано? Или существует более глубокая причина решения языкового дизайна?
BTW, свойство хранимого типа - это терминология Swift. В других языках их можно назвать переменными класса. Пример кода:
struct FooStruct {
static var storedTypeProp = "struct stored property is OK"
}
FooStruct.storedTypeProp // evaluates to "struct stored property is OK"
class FooClass {
class var computedClassProp: String { return "computed class property is OK" }
// class var storedClassProp = "class property not OK" // this won't compile
}
FooClass.computedClassProp // evaluates to "computed class property is OK"
Edit:
Теперь я понимаю, что это ограничение тривиально для работы, например, используя вложенную структуру со хранимыми свойствами:
class Foo {
struct Stored {
static var prop1 = "a stored prop"
}
}
Foo.Stored.prop1 // evaluates to "a stored prop"
Foo.Stored.prop1 = "new value"
Foo.Stored.prop1 // evaluates to "new value"
Это, по-видимому, не позволяет им быть глубоко непостижимым языком для объяснения этого ограничения.
Учитывая это и формулировку сообщения компилятора, о котором упоминает Мартин Гордон, я должен сделать вывод, что это просто что-то (второстепенное).