[解決済み] Objective-Cのtypedef enumとは何ですか?
質問
を根本的に理解していないようです。
enum
は、どのような場合に使用するのでしょうか?
例えば
typedef enum {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
ここで本当に宣言されていることは何でしょうか?
どのように解決するのか?
ここでは、3つのことが宣言されています。無名列挙型が宣言されています。
ShapeType
はその匿名列挙のための typedef として宣言されており、3つの名前
kCircle
,
kRectangle
および
kOblateSpheroid
は、積分定数として宣言されています。
それを分解してみよう。 最も単純なケースでは、列挙は次のように宣言されます。
enum tagname { ... };
というタグで列挙を宣言しています。
tagname
. C や Objective-C では(ただし
ではなく
C++の場合)、この
は
の前に
enum
キーワードを使用します。 例えば
enum tagname x; // declare x of type 'enum tagname'
tagname x; // ERROR in C/Objective-C, OK in C++
を使用する必要がないようにするために
enum
キーワードを随所に配置することで、typedefを作成することができます。
enum tagname { ... };
typedef enum tagname tagname; // declare 'tagname' as a typedef for 'enum tagname'
これは1行に簡略化できる。
typedef enum tagname { ... } tagname; // declare both 'enum tagname' and 'tagname'
そして最後に、もし私たちが
enum tagname
と共に
enum
キーワードを使用すると
enum
を匿名にし、typedef名で宣言するだけです。
typedef enum { ... } tagname;
さて、この場合、宣言しているのは
ShapeType
を無名列挙型の型付けされた名前にします。
ShapeType
は実際には単なる積分型であり、宣言で列挙された値のうちのひとつを保持する変数を宣言するためにのみ使用されるべきものです。
kCircle
,
kRectangle
および
kOblateSpheroid
). を割り当てることができます。
ShapeType
変数にキャストすることで別の値を得ることができます。
最後に
kCircle
,
kRectangle
および
kOblateSpheroid
は、グローバル名前空間で積分定数として宣言されています。 具体的な値が指定されていないので,0から始まる連続した整数に代入される.
kCircle
は0です。
kRectangle
は1、そして
kOblateSpheroid
は2である。
関連
-
[解決済み] 警告 : フォーマット文字列は文字列リテラルではありません (安全でない可能性があります)
-
[解決済み] Objective-Cの定数
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] C#でenumからint値を取得する
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] C#の[Flags]Enum属性の意味とは?
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] C言語:拡張子「.mm」は何の略ですか?
-
[解決済み] .02fと%.2fの違いは何ですか?
-
[解決済み] Objective-CでNSNumberをintに変換する。
-
[解決済み] objcの "pi "と "M_PI "の違いは何ですか?
-
[解決済み] Objective-Cで抽象クラスを作成する
-
[解決済み] ブロック(__block)」というキーワードはどういう意味ですか?
-
[解決済み] NSDictionary または NSMutableDictionary にキーが含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み】タイトル変更時に不要なUIButtonのアニメーションを停止させる方法は?
-
[解決済み】UITableViewからセパレータラインを削除する方法はありますか?
-
[解決済み】このブロックで自己を強く捉えると、リテインサイクルになりそうです。