如果我有如下方法:
-(BOOL)shouldResize {
return _view != nil;
}
其中_view是指向对象的指针,显式 nil 检查是必要/推荐的,还是只需执行以下操作就足够了:
-(BOOL)shouldResize {
return _view;
}
我想知道在将指针投射到 BOOL 时是否会弹出任何奇怪的行为,如以下示例所示:https://developer.apple.com/documentation/objectivec/bool?language=objc
(我想你也可以做return !!_view
,对吧?
根据平台或体系结构的不同,BOOL
可能等同于signed char
。因此,return _view
是不安全的。_view
的实际指针值将被截断为单个字节。即使_view
不是nil
,这个字节也很可能是 0。在这种情况下,代码将在应该为 true 时返回 false。
return _view != nil
是安全合理的。使用return !!_view
是正确的,可能合适,也可能不适合,具体取决于团队的编码标准。在某些地方,这是"规范化"布尔表达式的惯用方式。其他人可能会觉得它太聪明了一半,而且"丑陋"(如此处其他答案所示)。
为了可读性,我更喜欢"return _view != nil"。该方法返回一个布尔值,因此我更喜欢从方法中的代码中显而易见。
在您的情况下,第二个选项(返回_view)也可以。
"回来!_view"我觉得很丑。
BOOL 类型在 32 位和 64 位模式下的定义不同,因此行为不同。因此,返回_view而不是_view != nil 是一个错误。
从 Swift 那里得到一个提示(无论如何你很快就会这样做)。在 Swift 中,self.view != nil 是唯一合法的方式。谢天谢地。
举个例子,聪明是多么危险,"回报!_view"不仅丑陋,而且是错误的。它的作用与请求相反。
只需返回视图将自动处理视图是否为零。如果为 nil,它将返回"否"和"是"。所以第二个版本的 shouldResize 就足够了。
根据我的说法,最佳做法是进行明确的 nil 检查,以便清楚地了解、更好的可维护性并避免意外。