将NSString与一串字符串进行比较的更快/更简单的方法

Ala*_*lan 0 iphone cocoa objective-c

Objective-C有更好的方法吗:

if ([elementName isEqual:@"one"]){
   // do some stuff
}
else if ([elementName isEqual:@"two"]]{
   // do more stuff
}
else if ([elementName isEqual:@"three"]]{
   // do more stuff
}

理想情况下,我想要像:


//BAD CODE, NOT REAL!!!

  switchString(elementName){
     @"one":
        // do stuff
        break;
     @"two":
        // do more stuff
        break;
     @"three":
        // do more stuff
        break;
    }

Har*_*ich 7

更简洁一点

NSArray* array = [NSArray arrayWithObjects:@"one",@"two",@"three",nil];

int index = [array indexOfObject:elementName];

switch (index) {
    case 0:
        break;
    ...
    default:
        // -1 would be not fount      
}
Run Code Online (Sandbox Code Playgroud)

另外,更复杂的方法是将字符串存储NSInvocations在字典中,并使用元素名称作为键来调出调用.如果"做东西"部分更多的是范围内的几行,我会这样做

  • `indexOfObjectIdenticalTo:`只有当`elementName`是来自同一实现文件的常量字符串(即来自字符串文字)时才会起作用.如果它是由用户输入的,复制到或从的NSMutableString在任何点,或从所述框架获得的(例如,从'NSLocalizedString`),它不会是相同的(相同的对象)中的任何恒定串阵列.正确的消息是`indexOfObject:`. (2认同)