Objective-Cのtypedef列挙型とは何ですか?



5 Answers

AppleはXcode 4.4以来このような列挙型を定義することを推奨しています:

typedef enum ShapeType : NSUInteger {
    kCircle,
    kRectangle,
    kOblateSpheroid
} ShapeType;

彼らはまた便利なマクロNS_ENUMを提供します:

typedef NS_ENUM(NSUInteger, ShapeType) {
    kCircle,
    kRectangle,
    kOblateSpheroid
};

これらの定義は、より強力な型チェックと優れたコード補完を提供します。 NS_ENUMの公式文書は見つかりませんでしたが、WWDC 2012セッションの「Modern Objective-C」ビデオをhere見ることができhere

UPDATE: hereに公式文書へのリンク。

Question

私はenumが何であるか、そしてそれをいつ使用するのかを根本的に理解しているとは思わない。

例えば:

typedef enum {
    kCircle,
    kRectangle,
    kOblateSpheroid
} ShapeType;

ここに本当に何が宣言されていますか?




可能な値がkCirclekRectangle 、またはkOblateSpheroidのユーザー定義型。 列挙型(kCircleなど)内の値は、列挙型の外側に表示されます。 そのことを念頭に置くことが重要です( int i = kCircle;など)。




Enumはユーザー定義のデータ型です。 ENUMERATED DATA TYPES列挙型データ型変数は、以前に宣言された値のみを取ります。

enum month { jan = 1, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec };
enum month this_month;

this_month = feb;

上記の宣言では、monthは列挙型として宣言されています。 これは、janからdecの値のセットで構成されます。 数値的に、janには値1が与えられ、febには値2が与えられます。

this_month変数はmonthと同じ型で宣言され、febに関連付けられた値が割り当てられます。 This_monthには、月の宣言の初期化リストで指定された値以外の値を割り当てることはできません。




TypedefはCおよびC ++のキーワードです。 基本データ型(char、int、float、double、struct&enum)の新しい名前を作成するために使用されます。

typedef enum {
    kCircle,
    kRectangle,
    kOblateSpheroid
} ShapeType;

ここでは列挙型のShapeTypeを作成し、以下のように列挙型ShapeTypeの新しい名前を記述できます

ShapeType shape1; 
ShapeType shape2; 
ShapeType shape3;



typedefは、既存の変数型の名前を再定義するのに便利です。 これは、データ型を呼び出すための簡潔で意味のある方法を提供します。 例えば:

typedef unsigned long int TWOWORDS;

ここでは、unsigned long int型はTWOWORDS型に再定義されています。 このようにして、unsigned long int型の変数を書くことができます。

TWOWORDS var1, var2;

の代わりに

unsigned long int var1, var2;



enumは、structで行うことができないenum要素に値を代入するために使用されます。 だから毎回、完全な変数にアクセスするのではなく、列挙型の変数に割り当てる値で行うことができます。 デフォルトでは、割り当ては0で始まりますが、任意の値を割り当てることができ、列挙の次の変数には前の値+1の値が割り当てられます。




Related