Iphone 将NSString与一组字符串进行比较的更快/更简单的方法
在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 } 如果([elementName isEqual:@“一”]){ //做点什么 } 如果([elementName isEqual:@“two”]]{ //多做事 } 如果([elementName isEqual:@“三”]]{ //多做事 } 理想情况下,我想要的是: //BAD CODE, NOT REAL!!! switchString(elementName){ @"one": // do stuff break; @"two": // do more stuff break; @"three": // do more stuff break; } //糟糕的代码,不是真的!!! switchString(elementName){ @“一”: //做事 打破 @“二”: //多做事 打破 @“三”: //多做事 打破 }Iphone 将NSString与一组字符串进行比较的更快/更简单的方法,iphone,objective-c,cocoa,Iphone,Objective C,Cocoa,在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 } 如果([elementName isEqual:@“一”]){ //做点什么 } 如果(
不,您这样做是正确的,除非我使用:
[elementName isEqualToString:@"one"]
再简洁一点
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
存储在字典中,然后使用元素名作为键拉出调用如果您告诉我们您真正想要做什么,我们可能会更容易帮助您。打开字符串通常是设计不好的标志…这是在diEndElement(XMLParserDelegate)中方法。这是一种非常酷的方法!另外,我还不知道nsinvocation看起来很完美!!!indexofobject-dentialto:
只有在elementName
是一个常量字符串(即,来自字符串文字)时才会起作用来自同一个实现文件。如果它是由用户输入的、在任意点复制到NSMutableString或从NSMutableString复制的、或从框架中获得的(例如,从NSLocalizedString
),则它将与(与相同的对象)数组中的任何常量字符串。正确的消息是indexOfObject:
。另一种方法是使用块:void(^action)(=[[NSDictionary Dictionary WithObjectsSandKeys:^{/*do thing one*/},@“one”,“do thing two*/},@“two”,nil]objectForKey:elementName];if(action)action();
不是非常优雅,但比NSInvocation
简单。