我一直在努力寻找一种更好的方法来打开字符串的每个字符。
我现有的代码是:
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
任何想法????
感谢, 亚历
答案 0 :(得分:0)
通常你可以做到
switch(c)
{
case:'a':; // fall throught
case:'b':
{
[NewName appendString:@"x"];
break;
}
}
但如果使用'Ú'
,则会出现编译错误,因为此“char”不是unichar
。
您可以尝试设置char
switch(c)
{
case: 218:; // 'Ú' , fall throught
case: 186: // '°'
{
[NewName appendString:@"x"];
break;
}
...
}
我无法测试,因为我无法获得有效的'Ú'
。
希望发表评论,也许我可以扩展并回答更多问题;)