当前位置:  开发笔记 > 编程语言 > 正文

布尔逻辑失败

如何解决《布尔逻辑失败》经验,为你挑选了1个好方法。

我对布尔逻辑有一个奇怪的问题.我必须做一些愚蠢的事,但我无法弄清楚.在下面的代码中,firstMeasure.isInvisibleArea为true,measureBuffer1为nil.即使test1由于某种原因正在评估NO,它仍然会进入我的if语句.如果我使用注释掉的行,它可以正常工作.知道为什么会这样吗?

BOOL firstVisible = firstMeasure.isInVisibleArea;
BOOL notFirstVisible = !(firstMeasure.isInVisibleArea);
BOOL measureBufferNil = measureBuffer1 == nil;

BOOL test1 = measureBuffer1 == nil && !firstMeasure.isInVisibleArea;
BOOL test2 = measureBufferNil && !firstVisible;

if (measureBuffer1 == nil && !firstMeasure.isInVisibleArea)
//if (measureBufferNil && !firstVisible)    
{
    //do some action
}

更新1:

我将问题隔离到!firstMeasure.isInVisibleArea,因为我完全接受了measureBuffer位.里面的isInVisible区域是一个小的计算(它不会修改任何东西),但计算是使用self.view.frame.我也会把这个从等式中拿出来看看会发生什么.我的预感是self.view.frame正在两次调用isInVisibleArea之间切换.


更新2:这确实是问题所在.我在下面更详细地添加了答案



1> GoatRider..:

如有疑问,您应该完全括号.在没有查找优先级规则的情况下,我认为正在发生的事情是=正在获得比==或&&更高的优先级.所以尝试:

BOOL test1 = ((measureBuffer1 == nil) && !firstMeasure.isInVisibleArea);

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有