-3

我将如何在 Objective-c 中处理以下内容?

我想构建一个测试多个条件的方法。下面是一些伪代码来表达我想要实现的目标:

if
   condition1 fulfilled, return 1
   condition2 fulfilled, return 2
   condition3 fulfilled, return 1
   condition4 fulfilled, return 1
   condition5 fulfilled, return 2
   no condition fulfilled, return 3 
end if
4

4 回答 4

2

取决于条件是否相互排斥,可能需要考虑几个因素。

如果条件互斥,最简单的解决方案是按返回值对它们进行分组:

if (condition1 || condition3 || condition4) return 1;
if (condition2 || condition5) return 2;
return 3;

如果条件不是互斥的,您可以仅将测试顺序中彼此相邻的条件组合在一起:

if (condition1) return 1;
if (condition2) return 2;
if (condition3 || condition4) return 1;
if (condition5) return 2;
return 3;

请注意,虽然您在退货后不需要elsea,但在某些商店中通常会包含 an else。这是编码标准化的问题,应该由您的编码团队共同决定。

如果你想真正花哨,你可以创建一个blocks数组,按顺序测试条件,并返回 block 返回的值。这是迄今为止最棘手的方法。除非条件以相同的方式构造,并且代码对读者有意义,否则它将严重损害可读性。s链对if读者来说总是有意义的,因此很难与它们在可读性上竞争。

于 2013-02-25T21:49:27.920 回答
0
if ( condition1 ) return 1;
else if ( condition 2 ) return 2;
else if ( condition 3 ) return 1;
.....
于 2013-02-25T21:44:02.253 回答
0

您可以使用与任何类 C 语言完全相同的方式来处理此问题:

if (condition1) {
    return 1;
} else if (condition2) {
    return 2;
} else if ...

} else {
    return 3;
}
于 2013-02-25T21:44:30.627 回答
0

你得到了很好的答案,但如果你只想比较两个单个值:

int variableToCompare = ...;
switch (variableToCompare) {
     case 1: NSLog(@"1"); break;
     case 2: NSLog(@"2"); break;
     case 3: NSLog(@"3"); break;
     default: NSLog(@"This will be executed if any of the conditions above are YES");
};
于 2013-02-25T21:52:51.900 回答