您的代码看起来工作正常。它的代码很糟糕,但工作正常,对于任何匹配都会调用 // do Nothing 部分,而对于数组中的每个不匹配都会调用 // do some 部分。我怀疑问题是您期望 // 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
}
}