我有这段代码:
if ((total == (total1 && total2 && total3)))
{
[scrollview.contentOffset = CGPointMake (0,0)];
}
这就是按钮操作的内容:
if (sender.tag == 1)
{
total1 = 10;
}
if (sender.tag == 2)
{
total2 = 20;
}
if (sender.tag == 3)
{
total3 = 30;
}
如果用户点击了三个正确的按钮(类似于密码密钥),我试图回到滚动视图的起始页面。
逻辑运算符&&
在Objective-C中是否运行良好,我是否正确使用它?
答案 0 :(得分:3)
if ((total == (total1 && total2 && total3)))
你做不到。你必须分别明确地比较它们。
if ((total == total1) && (total == total2) && (total == total3)))
但是这留下了total
如何同时等于所有三个的问题。
答案 1 :(得分:1)
在您的代码中:
if ((total == (total1 && total2 && total3)))
{
[scrollview.contentOffset = CGPointMake (0,0)];
}
评估if表达式时,首先评估(total1 && total2 && total3)
。这可以是YES
或NO
(如果您愿意,可以是真或假),或者(0或1)。
所以你的代码等同于以下内容:
BOOL allVariablesAreNotZero = total1 && total2 && total3;
if (total == allVariablesAreNotZero)
{
[scrollview.contentOffset = CGPointMake (0,0)];
}
在更好地解释问题之后编辑
按下时按钮执行以下操作:
- (void)buttonClicked:(id)sender
{
UIButton *button = (UIButton *)sender;
buttonsCombination = buttonsCombination | (1 << button.tag);
}
其中buttonsCombination
是NSUInteger。然后使用以下测试来查看按下的按钮是否正确(我用三个按钮做这个,但你猜这个想法)
NSUInteger correctCombination = (1 << button1) | (1 << button2) | (1 << button3)
if (buttonsCombination == correctCombination) {
// The combination is correct
} else {
// The combination is incorrect
}
buttonsCombination = 0;
最后,请注意这是有效的,因为NSUInteger中有足够的位用于30个按钮。
在这里,我使用了bitwise operators |
和<<
。
答案 2 :(得分:0)
您当前的代码基本上说的是“如果total
为'true'且total1
,total2
和total3
也都是非零或{{1} }}为零且total
,total1
和total2
也都为零,然后执行某些操作“。
你所拥有的total3
正在进行逻辑/布尔比较。它将其参数视为&&
或true
,如果两个参数在任何其他情况下都评估为false
和true
,则返回true
。 false
将==
的值与从total
表达式获得的true
或false
值进行比较。这可能不是你想要的。
似乎您想要说的是“如果&&
等于total
,total1
和total2
的总和,那就做点什么” 。假设是这种情况,你会这样做:
total3
答案 3 :(得分:0)
尝试通过对其他两个答案的评论来确定你的意思“我尝试了但是当我开始运行应用程序时执行代码”也许这就是你想要实现的目标:
/* all in your button handler */
switch(sender.tag)
{
case 1:
total1 = 10;
break;
case 2:
total2 = 20;
break;
case 3:
total3 = 30;
break;
default:
break; // other buttons are ignored
}
// check it latest click means the total is now correct
if((total1 + total2 + total3) == total)
{
[scrollview.contentOffset = CGPointMake (0,0)];
}
因此,您可以通过按钮单击更新任何totalX,然后检查条件以重置滚动。