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