在Xcode中,我有一个if
和一个else
语句。
我想使声明有多个条件,但只有一个必须是'YES'。
例如:
我有NSString
,该字符串的值为:
[NSstring stringWithFormat:@"ABCDEFG12345"];
如果A
或1
或5
在字符串中,我需要检查if语句。我了解如何使用[string rangeOfString:@"CheckHere"];
。
我需要if
语句才能找到一个或所有给定的字母/数字。如果找到一个,执行给定的代码,如果找到两个,执行给定的代码,如果找到所有三个代码,则执行给定的代码。
答案 0 :(得分:6)
你不需要if-else。你可以这样做。
NSString* string = @"ABCDEFG12345";
int foundA = [string rangeOfString:@"A"].location == NSNotFound ? 0 : 1;
int found1 = [string rangeOfString:@"1"].location == NSNotFound ? 0 : 1;
int found5 = [string rangeOfString:@"5"].location == NSNotFound ? 0 : 1;
int foundCount = foundA + found1 + found5;
switch(foundCount) {
case 1: [self executeOne]; break;
case 2: [self executeTwo]; break;
case 3: [self executeThree]; break;
}
答案 1 :(得分:1)
一种可能的方法:
让我们假设您可以将rangeOfString和rangeOfCreak来调用(实际上有点繁琐)一起使用,并且可以编写如下方法:
-(NSInteger)numberOfMatchesFoundInString:(NSString*)inputString;
允许你传入一个字符串,并根据找到的匹配数返回0,1,2 ....
要以高度可读的方式使用此方便的结果,您可以使用switch语句。
NSInteger* matches = [self numberOfMatchesFoundInString:someString];
switch (matches) {
case 0:
//execute some code here for when no matches are found
break;
case 1:
//execute some different code when one match is found
break;
case 2:
//you get the idea
break;
default:
//some code to handle exceptions if the numberOfMatchesFoundInString method went horribly wrong
break;
当然有些人会告诉你,这在功能上与调用
没什么不同 if (someCondition) {
//do some stuff
}
else if (someOtherCondition) {
//do some different stuff
}
etc...
但实际上,你可以做任何一个工作。
答案 2 :(得分:1)
您可以使用一些有用的技巧进行字符串比较。
如果您只是需要测试,如果您的字符串是字符串列表之一,请使用以下内容:
NSArray *options = @[@"first", @"second", @"third"];
if ([options contains:inputString]) {
// TODO: Write true block
} else {
// TODO: Write else block
}
如果要检查字符串中是否包含至少一个字符,请使用NSString -rangeOfCharacterFromSet:。
不幸的是,如果你想检查你的字符串是否包含一个或多个字符串,你别无选择,只能将其写出来。如果你经常这样做,你可以选择写一个类别。
- (BOOL)containsAtLeastOneSubstring:(NSArray *)substrings
{
for (NSString *aString in substrings) {
NSRange range = [self rangeOfString:aString];
if (range.location!=NSNotFound) {
return YES;
}
}
return NO;
}
-