指示BOOL包装的方法?

时间:2009-08-06 07:56:41

标签: objective-c wrapper boolean

在Objective-C中,有没有办法表明NSNumber *实际上应该是BOOL?现在我的代码看起来像:

NSNumber *audio; // BOOL wrapper

如果没有评论,*音频是一个布尔值并不是很明显。

我的第一个想法是尝试

typedef NSNumber* BOOL;

但这显然是一个编译错误,因为typedef不理解Objective-C。

在不更改变量名称的情况下(使用现有API时很难),我应该如何指示NSNumber *是否包含布尔值?

3 个答案:

答案 0 :(得分:2)

代码:

typedef NSNumber* BOOL;

不编译,因为BOOL已经是typedef,并且不允许重新定义typedef。

因此您可以使用该类型的其他名称,例如:

typedef NSNumber NSNumberBool;
NSNumberBool *audio;

或者,或许更好,为变量命名,以便你知道它是一个NSNumber并包含一个bool,这样你甚至不需要去寻找变量类型:

NSNumber *audioNumberBool;
...
[audioNumberBool boolValue];

答案 1 :(得分:1)

显然,最好的解决方案是将属性重命名为isAudio或hasAudio。但是如果你做不到,那么平庸的解决方案就是你所描述的typedef。您描述的typedef失败,因为BOOL已在objc.h中的Objective C中定义:

typedef signed char BOOL; 

除此之外,这会让人感到困惑,因为它并没有表明它实际上是一个NSNumber而不仅仅是一个bool / int。我会建议像:

typedef NSNumber NSNumberBool;

或者在这种情况下,更好的是:

#define NSNumberBool NSNumber

然后使用:

NSNumberBool *audio;

或者只是像你一样使用评论。

答案 2 :(得分:0)

最好的方法是调用变量audioBool或表示布尔值的东西。评论很好,但有时可能会错过或只是不读。

如果您在重命名许多变量时遇到问题,可以使用Xcode的重构工具。只需右键单击(或cmd +单击)变量名称,选择Refactor ...选项,然后重命名变量。点击预览,Xcode将向您展示它将要改变的内容。如果你喜欢你所看到的,请继续申请,如果没有,请取消。

Xcode还提供了在提交重构操作之前创建快照的选项。默认情况下处于启用状态。所以如果出现任何问题,你可以回滚。