if else语句混淆Objective-C

时间:2013-10-19 03:21:41

标签: iphone ios objective-c nsstring

在Xcode中,我有一个if和一个else语句。

我想使声明有多个条件,但只有一个必须是'YES'。

例如

我有NSString,该字符串的值为:

[NSstring stringWithFormat:@"ABCDEFG12345"];

如果A15在字符串中,我需要检查if语句。我了解如何使用[string rangeOfString:@"CheckHere"];

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

3 个答案:

答案 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;
}

-