!=在大多数语言中意味着不相等 但是怎么样=!在目标C?我在下面的代码片段中找到了这个 感谢
- (void) toggleButton: (UIButton *) aButton
{
if ((_isOn = !_isOn))
{
[self setBackgroundImage:BASEGREEN forState:UIControlStateNormal];
[self setBackgroundImage:PUSHGREEN forState:UIControlStateHighlighted];
[self setTitle:@"On" forState:UIControlStateNormal];
[self setTitle:@"On" forState:UIControlStateHighlighted];
}
else
{
[self setBackgroundImage:BASERED forState:UIControlStateNormal];
[self setBackgroundImage:PUSHRED forState:UIControlStateHighlighted];
[self setTitle:@"Off" forState:UIControlStateNormal];
[self setTitle:@"Off" forState:UIControlStateHighlighted];
}
[self relaxButton:self];
}
答案 0 :(得分:7)
A =!B基本上是一个布尔说“将A设置为与B相反”。
例如,你可以这样做:
BOOL a = NO;
BOOL b = !a;
和b将为YES
。
您的代码行基本上是在翻转BOOL is_On的状态,然后如果新状态为YES则执行if语句块,否则正在执行else块。
答案 1 :(得分:1)
!
是基本的布尔运算符之一。与||
和&&
一起,!
用于处理布尔值。因为布尔值只能是真或假,所以布尔运算符很容易理解。
1)not运算符(!
)用于反转布尔变量的状态。真实变为虚假而虚假变为真实。
BOOL a = NO;
a = !a;
if (a) {
...
// will execute because a is now YES, or true
}
2)和运算符(&&
)用于两个布尔值。如果要比较的两个值都为真,则返回true。如果要比较的任何值为false,则返回false
BOOL a = NO;
BOOL b = YES;
if (a && b) {
...
// will not execute because NO && YES is NO
}
a = YES;
if (a && b) {
...
// will execute because YES && YES is YES
}
3)或运算符(||
)也用于两个布尔变量。如果所讨论的任何一个布尔都是真的,它将返回true。
BOOL a = YES;
BOOL b = NO;
if (a || b) {
...
// will execute because YES || NO is YES
}
在考虑布尔运算符时,真值表是一个有价值的资源
true || true = true
true || false = true
false || true = true
false || false = false
true && true = true
true && false = false
false && true = false
false && false = false
!true = false
!false = true
答案 2 :(得分:0)
你误读了它。它不是_isOn =! _isOn
,而是_isOn = !_isOn
。请注意=
和!
之间的空格。单个感叹号是逻辑否定,即它切换_isOn
的值并将结果分配回_isOn
。