我想在XmlParser中切换NSString,因为如果有15个或更多web服务,那么每次循环检查IF..ELSE中的正确元素。我不想让处理器忙碌.. < / p>
我搜索了很多,发现使用枚举我可以切换NSString但没有运气.. 我尝试了各种可能性,但有些我犯了错误。 请帮我解决这个大问题。
我在这里声明了我的枚举:
这里是&#34; elementName&#34;我得到枚举中声明的Exact值:
但我没有使用1
,而是202896536
:
答案 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;