变更记录
方案名称
语法 - Objective-C 中 BOOL 类成员变量的判断陷阱
关键字
语法 \ Objective-C \ BOOL \ 成员变量 \ 判断
需求场景
- 对某对象的 BOOL 类成员变量做肯定判断时,可能出现的判断错误
参考链接
(无)
详细内容
当自定义的类中包含 BOOL 类公共成员变量时,若该类的对象为空,
对该对象 BOOL 类成员变量做肯定判断时,无论逻辑上 BOOL 类成员变量是否为 YES,都会判断为 NO。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| TestObject *tObject0 = nil;
tObject0.isEmpty = YES;
if (tObject0.isEmpty) { NSLog(@"tObject0 is Empty"); } else { NSLog(@"tObject0 is not Empty"); }
TestObject *tObject1 = nil;
tObject1.isEmpty = NO;
if (tObject1.isEmpty) { NSLog(@"!tObject1 is Empty"); } else { NSLog(@"tObject1 is not Empty"); }
输出: 2016-01-20 12:53:04.527 TestEmpty[11315:335458] tObject0 is not Empty 2016-01-20 12:53:04.528 TestEmpty[11315:335458] tObject0 is not Empty
|
对该对象 BOOL 类成员变量做否定判断时,无论逻辑上 BOOL 类成员变量是否为 NO,都会判断为 YES。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| TestObject *tObject0 = nil;
tObject0.isEmpty = YES;
if (!tObject0.isEmpty) { NSLog(@"tObject0 is Empty"); } else { NSLog(@"tObject0 is not Empty"); }
TestObject *tObject1 = nil;
tObject1.isEmpty = NO;
if (!tObject1.isEmpty) { NSLog(@"!tObject1 is Empty"); } else { NSLog(@"tObject1 is not Empty"); }
输出: 2016-01-20 12:54:48.837 TestEmpty[11330:337224] tObject0 is Empty 2016-01-20 12:54:48.838 TestEmpty[11330:337224] !tObject0 is Empty
|
所以在针对此类成员变量判断时,一定要优先判断对象是否为空,只有在对象非空的条件下,判断 BOOL 类成员变量才有效。
效果图
(无)
备注
(无)