2009-08-06 41 views
1

在Objective-C中,有沒有什麼方法可以表明NSNumber *實際上應該是BOOL?現在我的代碼看起來像:指示BOOL包裝的方法?

NSNumber *audio; // BOOL wrapper 

沒有評論,它是不是立即明顯,*音頻是一個布爾值。

我首先想到的是嘗試

typedef NSNumber* BOOL; 

,但是這給了編譯器錯誤顯然是因爲typedef的不理解Objective-C的。

不改變變量名稱(這在使用現有的API時很困難),我應該如何指示一個NSNumber *擁有一個布爾值?

回答

2

代碼:

typedef NSNumber* BOOL; 

不編譯,因爲BOOL已經是一個typedef,它是不允許重新定義一個typedef。

所以,你可以對該類使用其他名稱,例如:

typedef NSNumber NSNumberBool; 
NSNumberBool *audio; 

或者,可能會更好,讓你知道它是一個NSNumber,幷包含一個布爾變量命名,這樣你不甚至需要去尋找變量類型:

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

「typedef NSNumber NSNumberBool」不能編譯 – tba 2009-08-06 08:12:54

+0

奇怪的是,它對我來說工作正常...使用Xcode 3.1.3。 – squelart 2009-08-06 08:15:12

+0

哦,它似乎只是不會在我的MyApp_Prefix.pch文件中編譯。你知道爲什麼嗎?我有一個不同的typedef在那裏工作很好。 – tba 2009-08-06 08:17:16

0

最好的方法是調用變量audioBool或表示布爾值的東西。評論很好,但有時候可能會被忽略或者沒有閱讀。

如果您在重命名多個變量時遇到問題,可以使用Xcode的重構工具。只需右鍵單擊(或cmd +單擊)變量名稱,選擇重構...選項,然後重命名該變量。命中預覽,Xcode會告訴你它將要改變的是什麼。如果你喜歡你所看到的,請繼續申請,如果沒有,請取消。

Xcode也會讓你選擇在提交重構操作前創建快照。這是默認設置。所以如果出現任何問題,你可以回滾。

+0

我會,但我想保持變量名與我的應用程序的服務器端保持一致。 另外,我更喜歡將變量類型的信息保留在其類型中,而不是依賴半匈語符號。 – tba 2009-08-06 08:15:02

1

很明顯,最好的解決方案是將屬性重命名爲isAudio或hasAudio。但如果你做不到,那麼一個平庸的解決方案就是你所描述的typedef。因爲BOOL在Objective C的在objc.h已經定義您所描述的類型定義失敗:

typedef signed char BOOL; 

旁邊其中,那將是令人困惑,因爲它並不表示它實際上是一個NSNumber的並不僅僅是一個bool/INT。我建議是這樣的:

typedef NSNumber NSNumberBool; 
在這種情況下

或許,更好的方式是:

#define NSNumberBool NSNumber 

,然後使用:

NSNumberBool *audio; 

或者只是使用評論,你做了。