私はココアフレームワークの列挙型を見ていました、そして私はこれを見ました:
enum {
NSNetServiceNoAutoRename = 1UL << 0
};
typedef NSUInteger NSNetServiceOptions;
私の質問は、これがどのように可能かということです。
それとどのようにNSNetServiceOptions結びついていenumますか?
そしてそれはObjectiveCでのみ可能ですか、それともcでも可能ですか?
私はココアフレームワークの列挙型を見ていました、そして私はこれを見ました:
enum {
NSNetServiceNoAutoRename = 1UL << 0
};
typedef NSUInteger NSNetServiceOptions;
私の質問は、これがどのように可能かということです。
それとどのようにNSNetServiceOptions結びついていenumますか?
そしてそれはObjectiveCでのみ可能ですか、それともcでも可能ですか?
Cの列挙型(およびその結果としてObj-CとC ++)は弱く型付けされます。つまり、列挙型とintの間で暗黙的にキャストできますが、それらは単なるintsです。
たとえば、これは完全に有効です。
enum {A = 1};
enum {B = A+1};
const int C = A | B;
enumがshortformの代わりにtypedefを使用する理由は、enumがtypedef enum {...} Name;デフォルトでtypeであるためintです。typedefを使用すると、列挙型を符号なし整数として定義できます。
NSNetServiceOptionsは、列挙型がとにかく整数値を保持するというコンテキストで、その列挙型に関連付けられています。上記の例では、列挙型の変数を次のように作成します。
NSNetServiceOptions _netServiceOptions;
typedefを無視して、直接使用することもできます。
NSUIInteger _netServiceOptions;