在Objective-C枚举中查找整数值
在Objective-C中是否可以查看在Objective-C枚举中查找整数值,objective-c,enums,Objective C,Enums,在Objective-C中是否可以查看int值是否在特定的枚举中?例如,在此枚举中: enum { ValidationLoginFailed = 2000, ValidationSessionTokenExpired = 2001, ValidationSessionTokenInvalid = 2002, ValidationEmailNotFound = 2003 }; typedef int ValidationStatusCodes;
int
值是否在特定的枚举中?例如,在此枚举中:
enum {
ValidationLoginFailed = 2000,
ValidationSessionTokenExpired = 2001,
ValidationSessionTokenInvalid = 2002,
ValidationEmailNotFound = 2003
};
typedef int ValidationStatusCodes;
是否可以查看ValidationStatusCodes
enum
中是否存在任意整数值
[ValidationStatusCodes contains:intResponseCode]
或者至少
[self intIsInRangeofEnum:ValidationStatusCodes forValue:intResponseCode]
不使用枚举
。enum
不是objective-C对象,因此不能在执行时向其发送消息
也许可以使用NSDictionary?没有比只使用NSDictionary更简单的方法了
(ValidationLoginFailed == intResponseCode ||
ValidationSessionTokenExpired == intResponseCode ||
ValidationSessionTokenInvalid == intResponseCode ||
ValidationEmailNotFound == intResponseCode)
一般来说,C对于处理动态事务或反映类型没有多大帮助,枚举是C的一个特性。[UPDATE]
在一些C++帖子中发现了这个方法,虽然不是完全动态的,但是小题大做:
将范围扩展数据块添加到枚举项:
enum {
ValidationLoginFailed=2000,
ValidationSessionTokenExpired=2001,
ValidationSessionTokenInvalid=2002,
ValidationEmailNotFound=2003
ValidationSucccesMIN=ValidationLoginFailed,
ValidationSucccesMAX=ValidationEmailNotFound,
ValdationValidSuccessCode=9999,
ValdationInvalidCode=10000
};
typedef int ValidationStatusCodes;
然后是以下几点:
-(ValidationStatusCodes)isReponseCodeValid{
for (int i=ValidationSucccesMIN; i<=ValidationSucccesMAX; i++) {
if(returnCode==i){
return ValdationValidSuccessCode;
}
}
return ValdationInvalidCode;
}
-(ValidationStatusCodes)isReponseCodeValid{
对于(inti=validationsuccessmin;i好吧,只要这个问题再次出现。有一个不错的开源项目
它允许执行以下操作:
JREnumDeclare( ValidationStatusCodes,
ValidationLoginFailed = 2000,
ValidationSessionTokenExpired = 2001,
ValidationSessionTokenInvalid = 2002,
ValidationEmailNotFound = 2003
);
然后ValidationStatusCodesByValue()
返回NSDictionary
哪些键对应NSNumber
s。因此:
if ([ValidationStatusCodesByValue() objectForKey:@(intResponseCode)])
...
这个问题有点过时,但我在软件设计中看到的标准是使用位掩码,其中每个值都是具有位移位的离散状态。在某些情况下,枚举值可以是其他值的组合
enum {
ValidationLoginFailed = 0, //0
ValidationSessionTokenExpired = 1 << 0, //1
ValidationSessionTokenInvalid = 1 << 1, //2
ValidationEmailNotFound = 1 << 2 //4
};
typedef int ValidationStatusCodes;
这与简单地检查“returnCode”是否在最小值和最大值之间有什么区别(复杂度/性能除外)?请注意,这个答案的关键是枚举值是互斥的。这对问题中给出的值不起作用。
int allStates = (ValidationLoginFailed | ValidationSessionTokenExpired |
ValidationSessionTokenInvalid | ValidationEmailNotFound); //7
if(val & allStates){
//some logic here
}