Как написано, ваш код даже не компилируется. Я не знаю, что показывает игровая площадка - я знаю только, что Детская площадка далека от лучшего места, чтобы проверить это.
Это то, что происходит, когда ваш код будет вставлен в не-Playground.
То, что вы на самом деле, вероятно, хотите что-то больше, как это:
enum Dwarf: String {
case Sleepy = "Sleepy"
case Grumpy = "Grumpy"
case Happy = "Happy"
case Doc = "Doc"
}
extension Dwarf: Printable {
var description: String {
return self.rawValue
}
}
С точки зрения того, то несет Swift необработанное значение с каждым, я не знаю, и я не уверен.
Если мы используем sizeOf
на Swift enum
, он имеет тенденцию давать нам значение 1 ... но, вероятно, есть оптимизация. Я предполагаю, что если мы создадим перечисление с более чем 256 значениями, sizeOf
может дать нам 2
.
Но если мы назовем sizeofValue
на свойстве rawValue
одного из значений enum
, оно дает нам разные номера (24 для строк), и это, конечно, имеет смысл.
sizeOf(Dwarf) // gives 1
sizeofValue(Dwarf.Sleepy) // also gives 1
sizeofValue(Dwarf.Sleepy.rawValue) // gives 24
Я полагаю, что, когда ваш enums
передаются вокруг, они были оптимизированы с точки зрения размера, так что перечисление с менее чем 256 значений имеет размер 1 байт. Значение enum
с размером менее 65536 имеет размер 2 байта, а enum
с любыми значениями, вероятно, не особенно полезно.
Между тем, при вызове rawValue
, вероятно, происходит некоторая Swift-магия, поэтому исходная исходная строка существует только после того, как вы ее запросили.
Вы, кажется, создали свой тестовый пример прямо здесь, в своем вопросе. Когда вы видите, что напечатано «описание называется»? Это ваш ответ. – rickster
Ну, я также ожидал, что он будет вызываться, когда я это сделаю: println (Dwarf.Sleepy), но это только что показало Enum на игровой площадке, а не описание, поэтому я не был уверен, что это только аспект игровых площадок, или если это то, что я делаю Пока не понимаю о языке. –
Это не компилируется для меня. У вашего 'enum' не будет' rawValue'. – nhgrif