Ответ 1
Ошибка компилятора: "Переменные класса еще не поддерживаются", поэтому кажется, что они еще не реализовали его.
Работая на языке 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"
Это, по-видимому, не позволяет им быть глубоко непостижимым языком для объяснения этого ограничения.
Учитывая это и формулировку сообщения компилятора, о котором упоминает Мартин Гордон, я должен сделать вывод, что это просто что-то (второстепенное).
Ошибка компилятора: "Переменные класса еще не поддерживаются", поэтому кажется, что они еще не реализовали его.
Расширяя трюк сложенной структуры OP для моделирования хранимых свойств типа, вы можете пойти дальше и сделать его похожим на свойство чистого хранимого типа вне класса.
Используйте вычисленную пару getter и setter, например:
class ClassWithTypeProperty
{
struct StoredTypeProperties
{
static var aTypeProperty: String = "hello world"
}
class var aTypeProperty: String
{
get { return self.StoredTypeProperties.aTypeProperty }
set { self.StoredTypeProperties.aTypeProperty = newValue }
}
}
Затем вы можете сделать:
println(ClassWithTypeProperty.aTypeProperty)
// Prints "hello world"
ClassWithTypeProperty.aTypeProperty = "goodbye cruel world"
println(ClassWithTypeProperty.aTypeProperty)
// Prints "goodbye cruel world"
"Для типов значений (т.е. структур и перечислений) вы можете определить хранимые и вычисленные свойства типа. Для классов вы можете определять только свойства вычисленного типа.
Отрывок из: Apple Inc." Быстрый язык программирования ". интерактивные книги. https://itun.es/cn/jEUH0.l
Я думаю, что Apple Engineers просто добавляет хранимые свойства типа к классам, но пока мы не знаем, может быть, никогда, на мой взгляд. И для этого есть метки (static и класс), чтобы отличить их.
Самая важная причина может заключаться в следующем:
Чтобы избежать разных объектов, есть общая переменная переменной
мы знаем:
static let storedTypeProperty = "StringSample" // in struct or enum ...
можно заменить на
class var storedTypeProperty:String {return "StringSample" } // in class
но
static var storedTypeProperty = "StringSample"
сложнее заменить фразу класса в классе.
//Я новичок в Swift Programming Language, и это мой первый ответ в Stack OverFlow. Рад обсудить с вами. ^^