Ios 如何将类属性与枚举匹配?

Ios 如何将类属性与枚举匹配?,ios,objective-c,Ios,Objective C,我想知道是否有办法简化以下内容(cat是与enum相对应的nsuiger: if((cat == enum_cat1) & self.cat1) || (cat == enum_cat2) & self.cat2) || (cat == enum_cat3) & self.cat3) || (cat == enum_cat4) & self.cat4)) 基本上,我有一个类别枚举和一组与这些属性相对应的布尔类属性。每当与

我想知道是否有办法简化以下内容(
cat
是与
enum
相对应的
nsuiger

   if((cat == enum_cat1) & self.cat1) ||
      (cat == enum_cat2) & self.cat2) ||
      (cat == enum_cat3) & self.cat3) ||
      (cat == enum_cat4) & self.cat4))
基本上,我有一个类别枚举和一组与这些属性相对应的布尔类属性。每当与
cat
匹配的属性为true时,我希望整个
if
语句为true。必须有更好的方法来做到这一点。它是什么?为什么不使用位掩码:

typedef enum Category {
    Category0 = 0 << 0,
    Category1 = 1 << 0,
    Category2 = 1 << 1,
    Cagegory3 = 1 << 2
};

@interface SomeClass : NSObject
@property (assign) Category category;
...
@end
或:

设置如下:

SomeClass *someClass = [SomeClass new];
someClass.category = Category1|Category3;
[someClass doCategory:Category3];

请注意
&
&

之间的区别。您可以使用
开关
语句或字典在
枚举
值和属性名称之间创建映射,然后获取属性名称并使用KVC检查其值

NSDictionary * catToProp = @{ @enum_cat1 : @"cat1",
                              // etc.
                            };

NSString * propName = catToProp[@cat];

if( [[self valueForKey:propName] boolValue] ){
}
您还可以使用阵列:

NSString * catToProp = { [enum_cat1] = @"cat1",
                         // etc.
                       };

利用C。

你想要的是
&
,而不是
&
枚举
是否还有其他与属性不对应的值?似乎我们中的一个人误解了这个问题。还有哪一个有待观察:)@JoshCaswell是的,我的答案没有直接回答这个问题,但这也启发了我如何处理这个问题。使用单独的布尔字段会敲响警钟,特别是当需要与某些
枚举进行比较时;你在建议一种新的攻击方式。我承认,如果有充分的理由的话,我会选择字面上的修正。
NSDictionary * catToProp = @{ @enum_cat1 : @"cat1",
                              // etc.
                            };

NSString * propName = catToProp[@cat];

if( [[self valueForKey:propName] boolValue] ){
}
NSString * catToProp = { [enum_cat1] = @"cat1",
                         // etc.
                       };