Ios 我可以换一个字符串吗

Ios 我可以换一个字符串吗,ios,objective-c,enums,switch-statement,Ios,Objective C,Enums,Switch Statement,我想在XmlParser中切换NSString,因为如果有15个或更多web服务,那么每次循环都会检查if..ELSE.中的正确元素,我不想让处理器忙 我搜索了很多,发现使用enum我可以切换NSString,但运气不好。。 我尝试过每一种可能性,但有些地方我犯了错误。 请帮我解决这个大问题 在此,我已声明我的枚举: 在“elementName”中,我得到了enum中声明的精确值: 但是我得到的不是1,而是错误的值,比如202896536: 您可以不将字符串强制转换为枚举值,您需要对其进行解

我想在XmlParser中切换NSString,因为如果有15个或更多web服务,那么每次循环都会检查if..ELSE.中的正确元素,我不想让处理器忙

我搜索了很多,发现使用enum我可以切换NSString,但运气不好。。 我尝试过每一种可能性,但有些地方我犯了错误。 请帮我解决这个大问题

在此,我已声明我的枚举:

在“elementName”中,我得到了enum中声明的精确值:

但是我得到的不是
1
,而是错误的值,比如
202896536


您可以将字符串强制转换为枚举值,您需要对其进行解析,枚举值是整数而不是字符串

您必须使用
if
语句

您可以使用助手方法:

WebServiceList.h

typedef NS_ENUM(NSUInteger, WebServiceList) {
    WebServiceListNone = 0,
    UserLoginComplexType = 1,
    RegisterUserResult = 2,
    RecoverPasswordResult = 3,
    ....
};

FOUNDATION_EXTERN WebServiceList WebServiceListForString(NSString *string);
WebServiceList.m

WebServiceList WebServiceListForString(NSString *string) {
    WebServiceList list = WebServiceListNone;

    if (![type isKindOfClass:[NSString class]]) {
    return CallRecordTypeNone;
    }
    else if ([string isEqualToString:@"UserLoginComplexType"] {
    list = UserLoginComplexType;
    }
    else if ([string isEqualToString:@"UserLoginComplexType"]) {
    list = UserLoginComplexType;
    }
    else .....

    return list;
 }

您不能通过创建枚举来完成此操作。您必须比较字符串

if([elementName isEqualToString:@"UserLoginComplexType"])
     //Do something...

从注释代码中可以看出,您正在解析XML并将其保存在名为
arrProductList
in-App Delegate的
NSMutableArray


完成XML解析后,变量应该包含数组中的数据。您应该查看变量并获取相应的值。由于您没有发布任何有关解析/XML结构的详细信息,因此我无法编写一些与结果获取相关的代码。

为了便于阅读并避免大量if-else语句,我喜欢将我的代码作为字典:

(还可以在将来向枚举添加更多内容时方便地进行更新)


尽可能粘贴代码而不是屏幕截图@Raptor是的,但只是为了调试信息,我放置了屏幕截图,以便开发人员能够正确理解。这个问题远远超出了使用整数的范围。您正在解析XML,
elementName
是标记名。您应该在XML标记中获取内容,而不是标记名,对吗?WebServiceList不是NSString。。相关标题在收到的上/下票数中起着很大的作用。@Raptor如果有超过25个Web服务,那么对于每个元素名称,我该怎么办?它将在每个if语句中查找。因此,为每个元素名称编写if语句是否正确?是的。我正在使用if语句。但是如果Web服务>25,我的线程将变得繁忙,应用程序将停止运行挂起几秒钟…在后台运行解析时,没有其他解决方案,因为无法绕过
if
语句,因为您无法将字符串强制转换为其中一个enum value.ya..我使用的正是您提到的方法。谢谢你宝贵的时间。如果你愿意,我会很快在聊天室和你见面
NSString* elementName = ...;

//  Default value
WebServiceList value = UserLoginComplexType;

NSDictionary* stringToEnum = @{@"UserLoginComplexType":@(UserLoginComplexType),
                               @"RegisterUserResult":@(RegisterUserResult),
                               @"RecoverPasswordResult":@(RecoverPasswordResult)};

NSNumber* enumValue = stringToEnum[elementName];

if(enumValue != nil)
    value = (WebServiceList)enumValue.integerValue;