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

时间:2015-05-07 10:09:53

标签: ios objective-c enums

我有一个委托函数,要求代理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,
};

3 个答案:

答案 0 :(得分:5)

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

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

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

否则您只需依次对每个值进行检查:

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

答案 1 :(得分:1)

使用此代码:

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

答案 2 :(得分:0)

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

num_types

此外,常见的约定是LiME,您可以检查枚举是否小于 dataGrid1.TableStyles.Clear(); DataGridTableStyle tableStyle = new DataGridTableStyle(); tableStyle.MappingName = table1.TableName; foreach (DataColumn item in table1.Columns) { DataGridTextBoxColumn tbcName = new DataGridTextBoxColumn(); tbcName.Width = 80; tbcName.MappingName = item.ColumnName; tbcName.HeaderText = item.ColumnName; tableStyle.GridColumnStyles.Add(tbcName); } dataGrid1.TableStyles.Add(tableStyle); ,但这在您的上下文中是不可能的。