美文网首页
iOS BOOL非0即真?

iOS BOOL非0即真?

作者: C_HPY | 来源:发表于2019-03-12 13:07 被阅读0次

先看一段🌰代码

 int a = 5;
 if (a) {
        // doSomething
    }

按照普通的逻辑来说,代码应该会执行 doSomething操作,然而有时候事与愿违。
if ()小括号里面应当是一个BOOL值,代码在某种情况下说明 变量a并没有转化为YES,变量a的值为5,编辑器转化结果并不是YES。
这说明,此处有妖孽出没。
再来看我在项目里遇到的问题:

WX20190312-114924@2x.png
因为测试同学提出只在iPhone4s上面出现了问题(是的,没错,我们还在支持iPhone4),图片是我在iPhone4s上的运行结果,图片中,表达式用NSInteger result去接收结果是8,显示BOOL 变量x4结果为也是8,比较尴尬,x4并不是YES,或者是NO,通常认为用if(x4),即if(8)进行判断结果应当为真,会执行if(8){doSomething},遗憾的是并没有
再来看我在iPhone7 Plus上面的运行结果: WX20190312-115216@2x.png
表达式完全相同,result的值为8,BOOL变量x4的结果为YES,不神奇,也不意外,本应如此的结果,问题是:为什么两个不同的设备会出现不一样的结果?
综合分析一下:
BOOL值在iOS设备上并不是非0即真,在不同的设备上可能有不同的表现,甚至是完全相反的表现。
具体更进一步分析iOS系统这样的表现原因可以参考:iOS-深挖BOOL

引申一下其它语言中关于非0是否为真的判断


image.png

在js中是非0即真的,在dart中非0为假,从多方面看来,用非0即真做判断,并非一个好的编程习惯。
说明:代码是维护的旧代码,这样凌乱的代码不是我写的。

相关文章

  • iOS BOOL非0即真?

    先看一段?代码 按照普通的逻辑来说,代码应该会执行 doSomething操作,然而有时候事与愿违。if ()小括...

  • Bool类型

    C语言和OC并没有真正的Bool类型C语言的Bool类型非0即真OC语言的Bool类型是typedef signe...

  • swift基础语法(控制流)

    一、 If语句 判断句不再有非0/nil即真;都有明确的真假(Bool ---> true/false) 二、三目...

  • Dart语法 -- [05 - 流程控制]

    1.1. if和else 和其他语言用法一样 这里有一个注意点:不支持非空即真或者非0即真,必须有明确的bool类...

  • C语言基础--关系运算符/逻辑运算符/if语句/switch语句

    #pragma mark- Bool 布尔类型 1. BOOL类型 布尔类型:它只有两个值,即真或者假,非真即假....

  • vicki753's iOS 基础-- BOOL、boo

    bool 非0即true,为0则为false BOOL取低位的数值,在Objetive-C里面YES 和 NO 只...

  • Swift - 基本数据类型(三)Bool布尔

    一、Bool类型,即逻辑类型(logical),有两种取值 true:真 false:假在C语言中:0是假,非零就...

  • 分支、循环

    一、BOOL布尔类型: 非真即假,YES表示真,NO表示假( 注:C语言中默认非零即为真) 二、关系运算符: <...

  • C语言基础 bool类型

    bool类型 C99标准以前,C语言没有定义bool类型,表达式的值0为假,非0为真。所以条件判断语句( if(…...

  • C语言基础2

    BOOL类型 BOOL数据额类型,是一种表示非真即假的数据类型,布尔类型的变量只有YES和NO两个值.YES表示表...

网友评论

      本文标题:iOS BOOL非0即真?

      本文链接:https://www.haomeiwen.com/subject/mivgpqtx.html