2016-07-22 8 views
1

スウィフトの新機能で、すぐに列挙型の機能を発見しました。計算されたプロパティを持つことはできますが、ストアドプロパティはありません。 列挙型にスクロールするプロパティがないのはなぜですか?スウィフト列挙型ストアドプロパティ

答えて

2

列挙型は構造化データ型です。彼らはvalue typeプロパティを保存することができます(例えばstaticプロパティ)。しかし、オブジェクトのようなインスタンスプロパティを持つことはできません。また、計算されたプロパティは、多くの場合、変化するenumの各caseに対して異なる値を返すことができます。アップルのドキュメントから

値型は、その値が、変数または定数 に割り当てられているときにコピーされ、又はそれが関数に渡されたときタイプです。

すべての構造体と列挙型はSwiftの値型です。これは、 という名前の構造体と列挙型のインスタンスと、プロパティとして持つすべての値 型がコード内で を渡されたときに常にコピーされることを意味します。

列挙型は割り当てられるたびにコピーされるため、reference typeなどのインスタンス変数を持つことはできません。違いは、参照型はコピーされる代わりに同じインスタンスを参照するということです。 Enumsはで定義されているので、値は常に同じになるので、とする。

編集:

構造体と列挙型との重要な違いは、構造体のプロパティを格納していることができるということです。列挙型の各ケースは異なる関連値を持つことができますが、列挙型の各値は列挙型で定義された単一のケースを表します。定義上、enumの場合は決して値を変更すべきではありません。そのような迅速な応答が、私のためのリファレンスタイプ、保存されているプロパティ

+0

おかげ:

構造体:値の種類、保存されていることができるプロパティ

列挙

:値の種類、保存されていることができない性質

クラスこの背後にある技術的理由は何であるかのように疑問を抱いています。なぜインスタンスストアドプロパティを持つことができないのですか? –

+1

moreを使って解を編集しました – Max

+0

構造体もenumのような値型ですが、プロパティを格納しています。あなたの回答構造ごとに、インスタンスのプロパティも格納されていないはずです。私が何かを逃している場合は私を修正してください。 –