【问题标题】:If-else not executing block when bool is true?当 bool 为真时 if-else 不执行块?
【发布时间】:2014-08-21 02:29:30
【问题描述】:

这很可能是我错过的一些愚蠢的事情,但请看一下这段代码:(它已被剥离为仅调试功能,尽管实际方法名称保持不变)

-(BOOL)shouldHideStatusBarItem:(BOOL)showItem{

if (showItem == YES) {
    NSBeep();
    NSLog(showItem ? @"YES(inloop)" : @"NO(inloop)" );
}
else if (showItem == NO){
    NSBeep();
    NSLog(showItem ? @"YES(inloop)" : @"NO(inloop)" );
}

NSLog(showItem ? @"YES" : @"NO" );
return showItem;
}

当我输入 YES 时,它会记录:

YES

当我输入 NO 时,它会记录:

 NO(inloop)
 NO

显然,当我输入 YES 时,它应该记录:

YES(inloop)
YES

有人有什么想法吗?

【问题讨论】:

  • 你传递了哪个,YES 还是一个整数值给方法?我想你可能会传递一个不是 1 的整数值。
  • 你确定你通过了YESBOOL 只是 signed char 的 typedef,因此没有什么可以阻止您传递超出范围 0, 1 的值。不是0 的所有内容都将被三元运算符视为真,但不会是== TRUE

标签: objective-c if-statement boolean nslog


【解决方案1】:

更改您的代码以检查showItem 变量的真实性。 BOOL 类型实际上并不限于值 YESNO

if (showItem)
{
    ...
}
else
{
    ...
}

【讨论】:

  • 详细信息:BOOLtypedefed 到 signed char,因此它可能是 YES (1) 和 NO (0) 以外的值。
  • 哦,我明白了——所有非零值都是真的!啊哈。
  • @PopKernel 除了YES 之外的所有非零值对于BOOL 都是非法的。
  • 那怎么可能是真的而不是== YES?
  • 可能是“非法”@AminNegm-Awad 的意思是“你不应该那样做”。因为显然BOOL 可能包含YESNO 以外的值(毕竟,它是8 位类型,而不是1 位)。
【解决方案2】:

lakesh 答案的变体

-(BOOL)shouldHideStatusBarItem:(BOOL)showItem{

    if (showItem) {  

    } else {

    }

    NSBeep();

    NSLog(showItem ? @"YES" : @"NO" );
    return showItem;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多