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.
};