1

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

NSNumber *audio; // BOOL wrapper

没有注释,*audio 是一个布尔值并不是很明显。

我的第一个想法是尝试

typedef NSNumber* BOOL;

但这显然给出了编译器错误,因为 typedef 不理解 Objective-C。

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

4

3 回答 3

2

编码:

typedef NSNumber* BOOL;

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

因此,您可以为该类型使用另一个名称,例如:

typedef NSNumber NSNumberBool;
NSNumberBool *audio;

或者,可能更好的是,命名变量,以便您知道它是一个 NSNumber 并包含一个布尔值,这样您甚至不需要去寻找变量类型:

NSNumber *audioNumberBool;
...
[audioNumberBool boolValue];
于 2009-08-06T08:10:47.393 回答
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;

或者只是像你所做的那样使用评论。

于 2009-08-06T11:41:30.493 回答
0

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

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

Xcode 还将为您提供在提交重构操作之前创建快照的选项。这是默认开启的。因此,如果出现任何问题,您可以回滚。

于 2009-08-06T08:02:54.507 回答