【发布时间】:2014-02-03 14:19:53
【问题描述】:
我一直在尝试找到一种更好的方法来打开字符串的每个字符。
我现有的代码是:
NSUInteger len = [oldName length], i;
SEL xSelector = @selector(characterAtIndex:);
unichar (*charAtIdx)(id, SEL, NSUInteger) = (typeof (charAtIdx)) [oldName methodForSelector:xSelector];
NSMutableString *NewName = [NSMutableString new];
for (i=0 ; i<len ; i++){
unichar c = charAtIdx(oldName,xSelector,i);
if (c == "Ú" || c == "°"){
[NewName appendString:@"s"];
}
else if (c == "Û" || c == "”"){
[NewName appendString:@"s"];
}
else if (c == "◊" || c == "˜"){
[NewName appendString:@"x"];
}
else blablabla
}
return NewName;
现在,上述方法似乎有效,但是我有大约 50 个 if 语句“切换”主要将 ASCII 代码(字符代码 128-255)扩展为更有意义的代码。
我考虑过使用带有 typedef 枚举的 switch 语句并打开它,但是,以下不起作用:
typedef enum {·,¡,Ê,∆} ExtendedASCII;
这个想法是替换“unichar c = charAtIdx(oldName,xSelector,i);”与以下内容:
ExtendedASCII c = charAtIdx(oldName,xSelector,i);
Switch c
case 0: //being ·
case 1: // being ¡
blablabla
有什么想法吗????
谢谢, 亚历克斯
【问题讨论】:
-
通常的方法是将此类数据添加到字典中。这通常可以很容易地搜索到。例如,使用
[NSDictionary dictionaryWithObjectsandKeys: ... , nil];进行设置,使用objectForKey:进行搜索。把每个字符变成一个键(NSString),把每个替换变成一个字符串。 -
if (c == "Ú")无法正常工作,因为您将unichar与字符串进行比较。为什么你使用methodForSelector而不是简单地调用[oldName characterAtIndex:i]? - 最后,为什么你的字符串包含“错误”的字符呢?也许您有一个编码问题,可以在创建oldName字符串时在较早的步骤中解决。 -
我正在使用 methodForSelector 因为阅读下面的内容似乎更快stackoverflow.com/questions/10198913/…
-
不幸的是,“错误”字符是给定的,它们不是创建的,而是读取的,所以我需要转换它们。
-
你认为什么会更快,使用 NSDictionary 并在 switch 语句中使用 objectForKey 或简单地使用 "(int) c" 将字符转换为 int 然后在switch 语句?
标签: objective-c enums switch-statement typedef enumeration