2010-10-14 42 views
0

更快/更簡單的方法是否有在Objective-C更好的方式來做到:到一個NSString比較一串字符串

 
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; 
    } 
+0

如果你告訴我們你實際*想做什麼,這可能會更容易幫助我們。打開字符串通常表示設計不好...... – 2010-10-14 02:03:23

+0

這是在didEndElement(XMLParserDelegate)方法中。 – Alan 2010-10-14 02:07:48

回答

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  
} 

另一種更復雜的方式是將字符串和NSInvocations存儲在字典中,並使用元素名稱作爲關鍵字將請求拉出。我會這樣做,如果「做東西」的部分是更多的幾條線的範圍

+0

這樣做非常酷的方式!作爲獎勵,我不知道NSInvocations看起來完美! – Alan 2010-10-14 02:03:29

+2

'indexOfObjectIdenticalTo:'只有在'elementName'是一個來自同一實現文件的常量字符串(即來自字符串文字)時纔有效。如果它是由用戶輸入的,在任何時候複製到NSMutableString或從NSMutableString複製或從框架獲得(例如從'NSLocalizedString'),它將不會與(相同的對象)相同陣列。正確的消息是'indexOfObject:'。 – 2010-10-14 07:53:18

+0

謝謝,沒有看起來正確... – 2010-10-14 13:10:12

1

不,你這樣做,除了正確的,我會用:

[elementName isEqualToString:@"one"] 
相關問題