簡體   English   中英

Objective-C:檢查是否使用枚舉選項

[英]Objective-C: Check if using enum option

我有一個使用typedef枚舉的自定義對象。 如果我為我的對象設置了一些枚舉選項,我該如何檢查它們是否被使用?

typedef enum {
    Option1,
    Option2,
    Option3
} Options;

在創建我的對象時,我可能會使用:

myobject.options = Option1 | Option2;

我怎樣才能稍后檢查哪些枚舉選項被設置? 如:

if (myobject.options == Option1) {
  // Do something
}

if (myobject.options == Option2) {
  // Do something
}

如果要為options參數執行按位邏輯,則應定義枚舉,以便每個選項只設置一個位:

typedef enum {
    Option1 = 1,       // 00000001
    Option2 = 1 << 1,  // 00000010
    Option3 = 1 << 2   // 00000100
} Options;

然后使用按位OR運算符設置選項:

myObject.options = Option1 | Option2;

並使用按位AND運算符檢查已設置的選項:

if(myObject.options & Option1) {
    // Do something
}

您不應該使用枚舉,或者至少不使用標准編號。

#define Option1 1
#define Option2 2
#define Option3 4
#define Option4 8
#define Option5 16

值必須是2的冪,因此您可以將它們組合在一起。 值3表示選項1 + 2。 如果3是其他選項之一的有效值,則無法進行區分。

我建議使用NS_OPTIONS定義枚舉。 這是Apple推薦的創建此類枚舉的方法。

typedef NS_OPTIONS(NSUInteger, Options) {
    Options1 = 1 << 0,
    Options2 = 1 << 1,
    Options3 = 1 << 2,
};

然后,正如已經說過的那樣,您可以通過執行以下操作來分配值:

myObject.options = Option1 | Option2;

並檢查他們:

if (myObject.options & Option1) {
    // Do something
}
if ((myobject.options & Option1) == Option1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM