在Objective-C中,有没有办法表明NSNumber *实际上应该是BOOL?现在我的代码看起来像:
NSNumber *audio; // BOOL wrapper
如果没有评论,*音频是一个布尔值并不是很明显。
我的第一个想法是尝试
typedef NSNumber* BOOL;
但这显然是一个编译错误,因为typedef不理解Objective-C。
在不更改变量名称的情况下(使用现有API时很难),我应该如何指示NSNumber *是否包含布尔值?
答案 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还提供了在提交重构操作之前创建快照的选项。默认情况下处于启用状态。所以如果出现任何问题,你可以回滚。