我想知道是否有办法简化以下内容( cat
是 NSUInteger
对应于 enum
:
if((cat == enum_cat1) & self.cat1) ||
(cat == enum_cat2) & self.cat2) ||
(cat == enum_cat3) & self.cat3) ||
(cat == enum_cat4) & self.cat4))
基本上我有一个类别的枚举和一堆对应于这些属性的 bool 类属性。每当属性匹配
cat
是真的,我想要整个 if
声明为真实。 必须有更好的方法来做到这一点。它是什么?
最佳答案
为什么不使用位掩码:
typedef enum Category {
Category0 = 0 << 0,
Category1 = 1 << 0,
Category2 = 1 << 1,
Cagegory3 = 1 << 2
};
@interface SomeClass : NSObject
@property (assign) Category category;
...
@end
然后测试:
if (self.category & Category1) {
// Do first thing
} else if ((self.category & Category2) || (self.category & Category3)) {
// Do second or third thing
}
要么:
- (void)doCategory:(Category)category
{
if (self.category & category) {
// Do thing
}
}
像这样设置它:
SomeClass *someClass = [SomeClass new];
someClass.category = Category1|Category3;
[someClass doCategory:Category3];
注意
&
之间的区别和 &&
.
关于ios - 如何将类属性与枚举匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34054979/