4

我需要写一个这样的方法:

-(void)doStuff:(int)options;

基于这样的 typedef 枚举:

typedef enum
{
    FirstOption,
    SecondOption,
    ThirdOption
} MyOptions

为了能够以这种方式调用该方法,我需要做什么(即使用多个“启用”选项调用该方法:

[self doStuff:(FirstOption | ThirdOption)];

我需要设置typedef enum不同的吗?以及如何检查方法中收到的选项,一个简单的if (options == ...)

4

2 回答 2

4

你要求的是一个位数组。像这样定义您的选项:

enum MyOptions
{
    FirstOption = 0x01, // first bit
    SecondOption = 0x02, // second bit
    ThirdOption = 0x04, // third bit
    ... = 0x08 ...
};

将您建议的选项与 结合起来|,并使用&( options & SecondOption) 对其进行测试。

- (void) doStuff: (MyOptions) options
{
    if ( options & FirstOption )
    {
        // do something fancy
    }

    if ( options & SecondOption )
    {
        // do something awesome
    }

    if ( (options & SecondOption) && ( options & ThirdOption) )
    {
        // do something sublime
    }
}
于 2012-07-26T14:36:12.240 回答
1

我不是 Obj-C 的专家,但在其他语言中我会使用标志。如果每个值都是 2 的幂,那么它只会为该值设置一个位。您可以将该位用作特定选项的布尔值。

FirstOption = 1
SecondOption = 2
ThirdOption = 4

FirstAndThird = FirstOption | ThirdOption; // Binary Or sets the bits

// Binary And checks the bits
IsFirst = FirstAndThird & FirstOption == FirstOption; // is true
IsSecond = FirstAndThird & SecondOption == SecondOption; // is false
IsThird = FirstAndThird & ThirdOption == ThirdOption; // is true

这个问题也可能有用。

于 2012-07-26T14:37:18.960 回答