2015-05-07 39 views
1

我有一個代理函數,它要求代理請求UIActivityIndicatorViewStyle目標C:對enum變量進行有效性檢查

@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, 
}; 
+0

檢查此:http://stackoverflow.com/questions/7154304/objective-c-check-if-using-enum-option – x4h1d

+0

請參閱我的編輯。謝謝。 –

回答

2

通常,在檢查枚舉值時,您僅限於兩種方法之一。

如果枚舉值是在一個連續的序列,可以檢查該值是在其範圍內:

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

否則,你就只需要測試對證將每個值依次:

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

第二個看起來更具描述性和清晰。謝謝。 –

0

使用此代碼:

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

'UIActivityIndi​​catorViewStyle'不是用戶自定義的。 – Schemetrical

+0

你的意思是蘋果:p,但是,他們使用NSUIntegers作爲最近的枚舉。 – Schemetrical

+0

@計劃是的。你認爲他們是無懈可擊的? – trojanfoe

0

您可以枚舉的最後一個值和比較,如果提供的枚舉比枚舉的最後一個值小於或等於,所以:

- (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,但這是不可能的上下文。