Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSParameterAssert和BOOLs_Objective C - Fatal编程技术网

Objective c NSParameterAssert和BOOLs

Objective c NSParameterAssert和BOOLs,objective-c,Objective C,我有一个接受BOOL参数的方法,我想确保它在调用中不是nil -(void)setNetworkFilterWithName:(NSString *)nameOfFilter toState:(BOOL)newState 我不能使用NSParameterAssertnewState;因为当BOOL为false时,它将断言 所以我这样做: NSParameterAssert((newState == true) || (newState == false)); 有没有更优雅的方法来检查这个问

我有一个接受BOOL参数的方法,我想确保它在调用中不是nil

-(void)setNetworkFilterWithName:(NSString *)nameOfFilter toState:(BOOL)newState 
我不能使用NSParameterAssertnewState;因为当BOOL为false时,它将断言

所以我这样做:

NSParameterAssert((newState == true) || (newState == false));
有没有更优雅的方法来检查这个问题?

BOOL是一种值类型,而不是指针,因此它不能为NULL。只有零的才是假的,非零的才是假的。不需要检查

编辑: 如果您想检查并确保BOOL为YES或NO,这可能会证明非常有用,尤其是在意外传递NSNumber的情况下,如果它不是nil,则它将始终计算为true

NSParameterAssert!newState | | newState==是

布尔是一种值类型,不是指针,因此不能为NULL。只有零的才是假的,非零的才是假的。不需要检查

编辑: 如果您想检查并确保BOOL为YES或NO,这可能会证明非常有用,尤其是在意外传递NSNumber的情况下,如果它不是nil,则它将始终计算为true


NSParameterAssert!newState | | newState==是

布尔只是一个整数;它没有无效或未设置的概念,就像对象具有nil一样。0为false,其他任何内容均为true。您编写的参数assert不可能抛出assert:newState==YES | | newState==NO始终为true。你不能用枪做你想做的事。您可以转换为使用NSNumber,它作为对象类型,允许您传入nil并检查它


编辑:我对表达式newState==YES | | newState==NO的计算不正确;如果您不在YES和NO提供的范围内,也就是说,newState不是0或1,那么当它在C意义上计算为true或false时,它将不等于YES或NO。newState | | |!newState在C中始终为true,但是newState==YES | | | newState==NO只有在您可以确保newState包含YES或NO以及其他值时才始终为true。感谢乔指出了错误。

布尔只是一个整数;它没有无效或未设置的概念,就像对象具有nil一样。0为false,其他任何内容均为true。您编写的参数assert不可能抛出assert:newState==YES | | newState==NO始终为true。你不能用枪做你想做的事。您可以转换为使用NSNumber,它作为对象类型,允许您传入nil并检查它


编辑:我对表达式newState==YES | | newState==NO的计算不正确;如果您不在YES和NO提供的范围内,也就是说,newState不是0或1,那么当它在C意义上计算为true或false时,它将不等于YES或NO。newState | | |!newState在C中始终为true,但是newState==YES | | | newState==NO只有在您可以确保newState包含YES或NO以及其他值时才始终为true。感谢乔指出了错误。

关于==是和==否的陈述并不完全正确。你说你自己,布尔是一个不与int混淆的整数,所以考虑这一点:BooBooL=6;ifabool==是NSLog@It是的;伊法布尔NSLog@It评估结果为真;因为@Joe提到的原因,应该避免直接比较BOOL变量和Yes常量。关于==Yes和==NO的陈述并不完全正确。你说你自己,布尔是一个不与int混淆的整数,所以考虑这一点:BooBooL=6;ifabool==是NSLog@It是的;伊法布尔NSLog@It评估结果为真;因为@Joe提到的原因,应该避免直接比较BOOL变量和Yes常量。谢谢,这很有意义。我试图为传入的错误类型提供防御,所以这很有帮助。谢谢,这很有意义。我试图对传入的不正确类型进行防御,因此这很有帮助。