在iOS中,我们遇到了BOOL与bool的问题。
我知道一个是位域,另一个是整数。
但是,以下代码在iOS7和iOS8上的行为有所不同:
self.nativationItem.rightBarButton = _editButton; //where editButton is a UIBarButtonItem.
_editButton.enabled = _some_NSArray.count;
因为count被定义为NSUInteger
,我们期望它为0(false)或者对于任何其他值为> 0
然而,在iOS7上_some_NSArray.count> 0,editButton被禁用但在iOS8上启用了editButton!完全相同的代码。
另一件事是,如果我们将_some_NSArray.count转换为“bool”(不是大写字母),它可以同时适用于两者,但是如果我们将它转换为(BOOL)它可以在8但不是7上工作。
有什么想法吗?
答案 0 :(得分:6)
enabled
是BOOL
。 count
是NSUInteger
。正确的代码是:
_editButton.enabled = _some_NSArray.count > 0;
BOOL
只应分配YES
或NO
值(或条件表达式的等效结果)。
答案 1 :(得分:0)
BOOL
typedef signed char BOOL;
在objc.h中定义
布尔是
#define bool _Bool
从stdboo.h定义的宏,这与C语言中的bool相同