【问题标题】:Objective C Switch on CharacterObjective C 开启角色
【发布时间】: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


【解决方案1】:

通常你可以这样做

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;
    }
    ...
}

我无法测试,因为我无法获得有效的'Ú'。 希望cmets,也许我可以扩展并回答即将提出的问题;)

【讨论】:

  • 你是什么意思你不能得到一个有效的'Ú'??
  • 这个答案的语法是错误的。您的所有case 语句都有一个额外的冒号。并且通过的情况不需要分号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
相关资源
最近更新 更多