0

私はココアフレームワークの列挙型を見ていました、そして私はこれを見ました:

enum {  
    NSNetServiceNoAutoRename = 1UL << 0  
}; 

typedef NSUInteger NSNetServiceOptions;

私の質問は、これがどのように可能かということです。

それとどのようにNSNetServiceOptions結びついていenumますか?

そしてそれはObjectiveCでのみ可能ですか、それともcでも可能ですか?

4

2 に答える 2

1

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を使用すると、列挙型を符号なし整数として定義できます。

于 2012-05-10T10:39:13.770 に答える
1

NSNetServiceOptionsは、列挙型がとにかく整数値を保持するというコンテキストで、その列挙型に関連付けられています。上記の例では、列挙型の変数を次のように作成します。

NSNetServiceOptions _netServiceOptions;

typedefを無視して、直接使用することもできます。

NSUIInteger _netServiceOptions;
于 2012-05-10T10:40:03.260 に答える