0

在 Xcode 中,我有一个if和一个else声明。

我想让该语句具有多个条件,但其中只有一个必须为“是”。

例如

我有一个NSString,该字符串的值是:

[NSstring stringWithFormat:@"ABCDEFG12345"];

我需要让我的 if 语句检查 ifA1or5是否在字符串中。我了解如何使用[string rangeOfString:@"CheckHere"];.

我需要我的if陈述来找到一个或所有给定的字母/数字。如果找到一个,则执行给定的代码,如果找到两个,则执行给定的代码,如果找到所有三个,则执行给定的代码。

4

3 回答 3

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;
}
于 2013-10-19T03:33:12.187 回答
1

一种可能的方法:

假设您可以将 rangeOfString 和 rangeOfCharacter 调用的(实际上有点乏味)拼凑在一起,并可以编写如下方法:

-(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...

但实际上,您可以使任何一项工作。

于 2013-10-19T03:37:39.973 回答
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;
}

-

于 2013-10-19T03:38:55.120 回答