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

标签 ios objective-c

我想知道是否有办法简化以下内容( catNSUInteger 对应于 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/

相关文章:

ios - 设置 UITextField 的最大字符长度

android - 实时 native 移动应用程序使用哪种连接?

ios - EarlGrey 卡住动画并且不调用回调

ios - Swift3如何捕获所有异常?

ios - 如何将带有 Wit.ai iOS SDK 的 iOS 应用程序连接到运行 wit.ai 的 node.js 应用程序?

objective-c - 序列化为 JSON 的可编译 IDL

ios - XCode 设置以查看不适用于以前操作系统版本的代码

ios - 解析 XML 以读取 NSMutableArray

objective-c - 从服务器读取XML文件

ios - 应用程序的本地化不会改变应用程序中使用的 cocoapods 的语言