我可以切换NSString吗?

时间:2014-05-21 08:41:05

标签: ios objective-c enums switch-statement

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

我搜索了很多,发现使用枚举我可以切换NSString但没有运气.. 我尝试了各种可能性,但有些我犯了错误。 请帮我解决这个大问题。

我在这里声明了我的枚举:

Here I have declare my enum

这里是&#34; elementName&#34;我得到枚举中声明的Exact值:

Here in "elementName" I am getting Exact value as declared in enum

但我没有使用1,而是202896536

But instead of "1" I am getting wrong value Like'202896536'

4 个答案:

答案 0 :(得分:1)

你不能通过创建枚举来做到这一点。您必须比较字符串。

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

答案 1 :(得分:0)

你可以将字符串转换为ENUM值,你需要解析它,ENUM值是整数而不是字符串。

您必须使用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;
 }

答案 2 :(得分:0)

如您的评论代码中所示,您正在解析XML并保存在App Delegate中名为NSMutableArray的{​​{1}}。

完成XML的解析后,变量应该包含数组中的数据。你应该研究变量&amp;获取相应的值。由于您没有发布有关解析/ XML结构的任何进一步细节,因此我无法编写与结果提取相关的一些代码。

答案 3 :(得分:0)

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

(也可以在将来为枚举添加更多内容时轻松更新)

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;