Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Objective-C枚举中查找整数值_Objective C_Enums - Fatal编程技术网

在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;

在Objective-C中是否可以查看
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
}