你的代码似乎工作正常。尽管它是可怕的代码,但它工作正常,对于任何匹配项都会调用“啥也不做”的部分,并且对于数组中每个不匹配项都会调用“做些什么”的部分。我猜问题在于你期望如果没有匹配,则“啥也不做”部分执行一次,如果有任何匹配,则“做些什么”部分执行一次,但实际情况并非如此。你可能想要:
-(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 ) {
} else {
}
}
此外,你显然不理解宏及其何时该使用和不该使用的情况(通常来说,你几乎永远不应该使用它们,只有极少数例外)。这个宏被文本替换到你的代码中。这意味着每次使用 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 ) {
} else {
}
}
最后,你应该阅读NSArray和NSString文档以了解可以免费使用哪些功能,然后你会发现像KiwiBastard指出的containsObject这样的方法,然后你可以将你的例程改写为:
-(void) findRedundant: (NSString *) aString {
NSArray* alphaArray = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];
if ( [alphaArray containsObject: aString] ) {
} else {
}
}