标准的Objective-C BOOL getter约定是什么?

3
我知道在Objective-C中声明BOOL属性的标准方式是:@property (nonatomic, getter=isWhatever) BOOL whatever;,这也被证实是现今最常用的方式(见这个问题)。
但访问这个属性的最佳方式是什么?我理解对于setter方法和非BOOL属性,使用点语法优于[someObject someProperty],但这是否使得定义自定义getter名称变得毫无意义?
再次强调,我特别关注getter的惯例:我理解应该使用self.whatever,这会让[self isWhatever]没有用处,而getter=isWhatever变得无意义,这似乎是自相矛盾的。
这是语言演变过程中的意外副作用吗?
2个回答

4
选择一个比“whatever”更好的布尔变量名称会更好。例如:characterisCharacter相比。 self.isCharacter看起来不错,甚至比self.character更好。
使用“点符号”似乎不会改变布尔变量前缀约定中的“is”。

我同意self.isCharacter看起来更好,但是使用点符号来混淆方法名不是被反对的吗?啊哈哈哈,也许BOOL是个例外。 - Andrew
1
不应该使用点符号表示法(dot-notation)来调用具有副作用的方法。但是,对于countlength等方法则可以使用,并且Xcode自动补全功能也支持。基本上,该方法适用于那些本来就是属性的方法。总之,编写易于理解的代码是最重要的。 - zaph
那么如果 BOOL 的 setter 有副作用,类似于 Swift 中的 didSet 属性观察器呢?如果这些副作用不打算在其公共 API 中公开,那该怎么办? - Andrew
任何属性都可以有观察者,但这并不算作副作用或操作。一个没有参数但具有操作的方法的例子是 NSURLConnecton 上的 start 方法,因此不应使用点符号表示法。但如果您不想使用点语法,也可以不用。 - zaph
我不得不思考一段时间,但由于点符号表示法的目的是调用访问器方法,这对我来说绝对是最有意义的! - Andrew

1
在编程中,属性应该始终使用点语法,方法应该使用括号语法(您永远不应该调用属性(getter/setter)方法),并且“is”应该为所有BOOL属性添加前缀(而不仅仅是getter)。因此,您的属性的正确语法应该是myObj.isWhatever。

我同意属性和方法之间应该有明确的区分,但是对于所有内容都使用“is”与苹果的建议相违背。 - Andrew
安德鲁是正确的:名词和动词保持不变;形容词:属性名称省略“is”前缀,但指定了get访问器的常规名称。(安德鲁评论+1)。 - geowar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接