Objective C : 枚举变量的有效性检查

Objective C : validity check for an enum variable

我有一个委托函数,它向委托请求 UIActivityIndicatorViewStyle

@protocol StatusViewCustomizationDelegate <NSObject>

@optional
-(UIActivityIndicatorViewStyle)activityIndicatorStyle;

@end

在私有函数中,我检查委托是否响应此选择器,如果它响应,我调用该方法。下面是代码:

-(void)configureView
{
   UIActivityIndicatorViewStyle activityIndicatorStyleFromDelegate;
    if ([self.delegate respondsToSelector:@selector(activityIndicatorViewStyle)])
    {
        activityIndicatorStyleFromDelegate = [self.delegate activityIndicatorStyle];
    }
}

检查我在 activityIndicatorStyleFromDelegate 变量中收到的枚举值是有效的 UIActivityIndicatorViewStyle 枚举值的正确方法是什么?

编辑: UIActivityIndicatorViewStyle 是一个 iOS 定义的枚举。

typedef NS_ENUM(NSInteger, UIActivityIndicatorViewStyle) {
    UIActivityIndicatorViewStyleWhiteLarge,
    UIActivityIndicatorViewStyleWhite,
    UIActivityIndicatorViewStyleGray,
};

通常,在检查枚举值时,您只能使用两种方法之一。

如果枚举值在连续序列中,您可以检查该值是否在其范围内:

if (activityIndicatorStyle >= UIActivityIndicatorViewStyleWhiteLarge && 
    activityIndicatorStyle <= UIActivityIndicatorViewStyleGray) {
    NSLog(@"Good");
} else {
    NSLog(@"Bad");
}

否则你只需要依次检查每个值:

switch (activityIndicatorStyle) {
    case UIActivityIndicatorViewStyleGray:
    case UIActivityIndicatorViewStyleWhite:
    case UIActivityIndicatorViewStyleWhiteLarge:
        NSLog(@"Good");
        break;
    default:
        NSLog(@"Bad");
}

使用此代码:

if (style >= UIActivityIndicatorViewStyleWhiteLarge &&
    style <= UIActivityIndicatorViewStyleGray) {
    // valid
} else {
    // invalid
}

您可以获取枚举的最后一个值并比较提供的枚举是否小于或等于枚举的最后一个值,因此:

- (void)configureView
{
   UIActivityIndicatorViewStyle activityIndicatorStyleFromDelegate;
    if ([self.delegate respondsToSelector:@selector(activityIndicatorViewStyle)])
    {
        if ([self.delegate activityIndicatorStyle] >= UIActivityIndicatorViewStyleWhiteLarge &&
    [self.delegate activityIndicatorStyle] <= UIActivityIndicatorViewStyleGray) {
            activityIndicatorStyleFromDelegate = [self.delegate activityIndicatorStyle];
        }
    }
}

此外,一个常见的约定是 add one more enumeration that is called num_types,您可以检查枚举是否小于 num_types,但这在您的上下文中是不可能的。