Objective-C - 是!! BOOL有益

aro*_*oth 14 design-patterns boolean objective-c

我正在查看另一个开发人员提交给项目的差异,他们有很多代码可以做到!!<some BOOL value>.实际上,这似乎是实现布尔getter和setter的标准模式.他们已经实现了以下代码:

- (BOOL) hasId {
    return !!hasId_;
}
- (void) setHasId:(BOOL) value {
    hasId_ = !!value;
}
Run Code Online (Sandbox Code Playgroud)

我以前从未见过这种模式,我想知道使用它是否有任何好处.双重否定是否有用?

cit*_*onn 13

double boolean运算符只是确保返回的值是1或0.这就是:)

  • @Bavarious说的是什么,但是 - 如果是那种防御性的话 - 我至少会让这个该死的东西变得可读; `return _boolVar?是:否;` (7认同)
  • ...这会阻止像`obj.hasId = 42这样的代码; if(obj.hasId == YES)`来自条件失败.技术上,"是"(当前)映射到1,因此整数值不同.但从概念上讲,42和"YES"都代表一个真正的布尔值.双重否定将42分配折叠为"是"分配. (5认同)