我正在尝试让我的应用检查文本框中的文本,看看它是否与NSArray中的任何字符串匹配。我希望你能指出我正确的方向或给我一些代码来做到这一点。我很确定我需要使用if
语句。
谢谢!
答案 0 :(得分:3)
向数组发送containsObject:
消息,传递要检查的字符串。该方法将使用isEqual:
消息将您的字符串与数组中的每个对象进行比较。该邮件将返回BOOL
,您可以在if
声明中对其进行测试。
如果你想要一个更复杂的“匹配”定义而不是寻找一个相等的字符串,你需要自己循环数组并一次一个地对数组中的每个对象执行所需的测试。
另请注意,isEqual:
/ isEqualToString:
比较区分大小写:@"foo"
不等于@"Foo"
。如果你想要不区分大小写或区域设置感知比较,你需要自己循环数组并使用NSString的其他比较方法之一。
答案 1 :(得分:2)
'if'语句是一个很好的假设! - 所有编程语言的基本原则之一(如果不是基本原则)......
有101种方法可以做到这一点,所以你可能会得到一堆回复。
你想要做的就是:
请注意,还有其他各种方法,包括使用“快速枚举”的方法,但我会让您自己阅读这些方法。
好的,所以一些示例代码的时间:
NSEnumerator *enumerator;
enumerator = [myArray objectEnumerator]; // myArray is what we're checking
NSString *stringContents;
while (stringContents = [enumerator nextObject]) { // Cycles through array
if ([stringContents isEqualToString:@"SOMETHING"]) {
// We have a match! Call a method or something...
}
}
就像我说的那样,还有许多其他方法可以做到这一点,但希望这会让你开始!
编辑:如果要检查多个项目,例如textField1,textField2和textField3,您的代码可能如下所示(||是逻辑“OR”的符号):
if ([stringContents isEqualToString:textField1.text] ||
[stringContents isEqualToString:textField2.text] ||
[stringContents isEqualToString:textField3.text]) {
如果三个textField中的任何一个与您的数组内容匹配,则会评估为true。如果您只想在所有语句匹配时评估为true,则交换|| for&&。
编辑2:如果要与多个NSArray进行比较,将数组枚举和比较放入一个采用数组和字符串的单独方法是有意义的,并且可能返回一个依赖于BOOL的根据是否找到匹配项:
新方法:
-(BOOL)checkArray:(NSArray *)myArray forString:(NSString *)myString {
NSEnumerator *enumerator;
enumerator = [myArray objectEnumerator];
NSString *stringContents;
while (stringContents = [enumerator nextObject]) { // Cycles through array
if ([stringContents isEqualToString:myString]) {
return YES;
}
}
return NO;
}
然后你可以为多个数组调用它:
BOOL result1 = [self checkArray:array1 forString:textField.text];
BOOL result2 = [self checkArray:array2 forString:textField.text];
// Etc...
希望一切都有所帮助!...
编辑3:如果您需要使用搜索字词填充数组,有一个很好的方便方法:
NSArray *myArray = [NSArray arrayWithObjects:@"Item 1",@"Item 2", nil];
请注意以下几项重要事项:如果引号中的文字为每个项目,则前面带有@符号,最后一项必须始终为 nil 。您可以根据需要添加任意数量的项目。