您的代码似乎运行良好。它的代码很糟糕,但它工作正常,任何匹配都会调用 // do nothing 部分,而数组中的每个不匹配都会调用 // do something 部分。我怀疑问题是您希望 // do nothing 部分在没有匹配的情况下执行一次,并且 // do something 部分在有任何匹配的情况下执行一次,但事实并非如此。你可能想要:
-(void) findRedundant: (NSString *) aString {
#define ALPHA_ARRAY [NSArray arrayWithObjects: @"A", @"B", @"C", nil]
BOOL found = NO;
NSUInteger f;
for (f = 0; f < [ALPHA_ARRAY count]; f++) {
NSString * stringFromArray = [ALPHA_ARRAY objectAtIndex:f];
if ([aString isEqualToString:stringFromArray]) {
found = YES;
break;
}
}
if ( found ) {
// do found
} else {
// do not found
}
}
此外,您显然不了解宏以及何时应该使用和不应该使用它们(通常,您不应该使用它们,只有极少数例外)。宏在文本上替换为您的代码。这意味着数组创建和初始化发生在每次您使用 ALPHA_ARRAY。这太可怕了。
基本上,在您对自己正在做的事情有更深入的了解之前,永远不要再使用#define(常量除外)。在这种情况下,您将按照 taebot 的描述创建数组:
NSArray* alphaArray = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];
接下来,如果您正在为现代平台(10.5 或 iPhone)进行开发,您可以使用更容易阅读的快速枚举:
-(void) findRedundant: (NSString *) aString {
NSArray* alphaArray = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];
BOOL found = NO;
for ( NSString* stringFromArray in alphaArray ) {
if ([aString isEqualToString:stringFromArray]) {
found = YES;
break;
}
}
if ( found ) {
// do found
} else {
// do not found
}
}
最后,你应该阅读关于 NSArray 和 NSString 的文档,看看你可以免费做什么,然后你会找到 KiwiBastard 指出的 containsObject 之类的方法,你可以将你的例程重写为:
-(void) findRedundant: (NSString *) aString {
NSArray* alphaArray = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];
if ( [alphaArray containsObject: aString] ) {
// do found
} else {
// do not found
}
}