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

dev*_* gr 2 enums objective-c ios

我有一个委托函数,要求UIActivityIndicatorViewStyle从委托。

@protocol StatusViewCustomizationDelegate <NSObject>

@optional
-(UIActivityIndicatorViewStyle)activityIndicatorStyle;

@end
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

typedef NS_ENUM(NSInteger, UIActivityIndicatorViewStyle) {
    UIActivityIndicatorViewStyleWhiteLarge,
    UIActivityIndicatorViewStyleWhite,
    UIActivityIndicatorViewStyleGray,
};
Run Code Online (Sandbox Code Playgroud)

Ash*_*lls 5

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

如果枚举值是连续的,则可以检查该值是否在其范围内:

if (activityIndicatorStyle >= UIActivityIndicatorViewStyleWhiteLarge && 
    activityIndicatorStyle <= UIActivityIndicatorViewStyleGray) {
    NSLog(@"Good");
} else {
    NSLog(@"Bad");
}
Run Code Online (Sandbox Code Playgroud)

否则,您只需要依次测试每个值:

switch (activityIndicatorStyle) {
    case UIActivityIndicatorViewStyleGray:
    case UIActivityIndicatorViewStyleWhite:
    case UIActivityIndicatorViewStyleWhiteLarge:
        NSLog(@"Good");
        break;
    default:
        NSLog(@"Bad");
}
Run Code Online (Sandbox Code Playgroud)