Objective C切换角色

时间:2014-02-03 14:19:54

标签: objective-c enums switch-statement typedef enumeration

我一直在努力寻找一种更好的方法来打开字符串的每个字符。

我现有的代码是:

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

任何想法????

感谢, 亚历

1 个答案:

答案 0 :(得分:0)

通常你可以做到

switch(c)
{
    case:'a':; // fall throught
    case:'b':
    {
        [NewName appendString:@"x"];
        break;
    }
}

但如果使用'Ú',则会出现编译错误,因为此“char”不是unichar。 您可以尝试设置char

的int值
switch(c)
{
    case: 218:; // 'Ú' , fall throught
    case: 186: // '°'
    {
        [NewName appendString:@"x"];
        break;
    }
    ...
}

我无法测试,因为我无法获得有效的'Ú'。 希望发表评论,也许我可以扩展并回答更多问题;)