我试图缩短我的代码,从:
if(i== x || i == y || i == z )
至
if (i == ( x || y || z ))
我知道这种方式是错误的,因为我在日志中得到了不正确的 i。
但是,有什么方法可以缩短 Objective-C 中的代码吗?
我试图缩短我的代码,从:
if(i== x || i == y || i == z )
至
if (i == ( x || y || z ))
我知道这种方式是错误的,因为我在日志中得到了不正确的 i。
但是,有什么方法可以缩短 Objective-C 中的代码吗?
您可以使用一个switch
语句,但这并不能真正为您带来 2-3 个值。
switch (i) {
case x:
case y:
case z:
....some code....
break
default:
....some other code....
}
如果你检查的东西更复杂或者你有更多的选择,那就更省钱了。
如果有更高的概率,x==i
那么y==i
最好写它x==i || y==i
而不是y==i || x==i
因为如果第一个语句的计算结果为真,则第二个语句不会被计算(它是短路的)
如果你想检查很多你可以使用的对象NSArray
和indexOf
方法:
NSArray *matchingNumbers = @[@1,@2,@3,@4,@5,@6,@7,@8];
NSNumber *checkedNumber = @3;
if ( [matchingNumbers indexOfObject:checkedNumber] != NSNotFound)
{
//...
}
计算机处理数字信号。计算机的所有自然运算都是二进制的。
如果你想比较三个东西,你必须使用两个二进制比较来使它对计算机更好。
您还需要意识到更短的代码不一定更快。通常,这只是作者的一个捷径概念。
那么为什么你认为你需要进一步缩短这个表达式呢?
至于您比较 50 个值的问题。
制作一个由这 50 个变量组成的 NSMutableArray……然后使用此代码。
使用此代码:
if ([myArray containsObject:i]) {
奇迹般有效!
如果要分别检查每个值,可以使用 while 循环或 for 循环:
n = 0;
while (n<49) {
if (n==[myArray objectAtIndex:n]) {
//OR statement returned true for one of the 50 objects...
}
}
以下部分适用于需要对此问题有不同答案的其他人:
如果我们有其余的代码,可能有办法缩短你的整个条件语句......至于缩短“或”部分,我不确定如何......
但是像:
if ((i==x)||(i==y)) {
string=@"hello";
}
可能变成:
string = ((i==x)||(i==y)) ? @"hello";
或者......类似的东西:
if ((i==x)||(i==y)) {
string=@"hello";
} else {
string=@"goodbye";
}
可能变成:
string = ((i==x)||(i==y)) ? @"hello" : @"goodbye";
因为我经常使用带有数值的条件语句,所以我经常使用快捷方式,如果条件语句为真,则等于 1,而如果条件语句为假,则等于 0,因此我可以这样说
myNumber = ((i==x)||(i==y))*(z+w);
如果 i 等于 x 或 y,它将返回 true(即“1”),这将返回 1*(z+w) 或 (z+w),但如果条件为 false,则返回“0”,即返回 0* (z+w) 或 0。
最后说明:*可能有数学方法来表示一个函数帽子返回你想要的结果......例如,如果 x = -2 和 y = 2 而不是检查 i==x 或 i==y 只是检查如果 abs(i) == y (*abs 是绝对值)
如果您使用大量变量,则可以执行以下操作:)
if ([[[NSMutableArray alloc] initWithObjects:x,y,z,a,b,c,d,e,f,g,h,j,k,l,nil] containsObject:i]) {