2009-08-06 5 views
1

Objective-Cでは、NSNumber *が実際にBOOLであるべきことを示す方法はありますか?今すぐ私のコードは次のようになります:BOOLラッパーを示す方法は?

NSNumber *audio; // BOOL wrapper 

コメントなしでは、* audioはブール値であることはすぐには分かりません。

私が最初に考えたのは

typedef NSNumber* BOOL; 

を試してみたが、typedefでは、Objective-Cのを理解していないので、これは明らかにコンパイラエラーを与えました。

既存のAPIを使用すると困難な変数名を変更せずに、NSNumber *にブール値が保持されていることをどのように示す必要がありますか?

答えて

2

コード:BOOLはすでにtypedefであり、そしてtypedefで再定義することが許可されていませんので、

typedef NSNumber* BOOL; 

がコンパイルされません。

ですから、例えば、そのタイプに別の名前を使用することができます。

typedef NSNumber NSNumberBool; 
NSNumberBool *audio; 

または、おそらくより良い、あなたはそれをするNSNumberやブール値が含まれている、あなたがいないこの方法を知っているように、変数に名前を付けます変数型を探す必要があります:

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

"typedef NSNumber NSNumberBool"はどちらもコンパイルされません – tba

+0

奇妙なことに、私にとってはうまくいきます... Xcode 3.1.3を使用しています。 – squelart

+0

ああ、MyApp_Prefix.pchファイルでのみコンパイルされないようです。なぜなのかご存知ですか?私はそこでうまく動作する別のtypedefを持っています。 – tba

0

変数audioBoolまたはブール値を示すものを呼び出すのが最善の方法です。コメントは良いものばかりですが、時には見逃したり、読まないこともあります。

多くの変数の名前を変更する際に問題がある場合は、Xcodeのリファクタツールを使用できます。変数名を右クリック(またはcmd +クリック)して、[リファクタリング...]オプションを選択し、変数の名前を変更します。 Hit Previewを押すと、変更する内容がXcodeによって表示されます。あなたが見ているものが好きな場合は、先に進み、適用しない場合はキャンセルしてください。

Xcodeでは、リファクタリング操作にコミットする前にスナップショットを作成するオプションも提供されます。これはデフォルトでオンになっています。だから何かがうまくいかない場合は、ロールバックできます。

+0

私は、変数名をアプリケーションのサーバー側と一致させておきたいと思います。 また、私は半ハンガリー表記に頼るのではなく、変数の型に関する情報をその型に保存することを好みます。 – tba

1

明らかに、プロパティの名前をisAudioやhasAudioのように変更することをお勧めします。しかし、あなたがそれをやり遂げることができないならば、普通の解決策は、あなたが記述したようなtypedefです。

typedef signed char BOOL; 

それはその実際のNSNumberだけではなく、ブール/ int型を示すものではありませんので、それは混乱するだろう、その横に:BOOLはすでにobjc.hでのObjective Cで定義されているので、あなたが記述のtypedefは失敗します。私のようなものを示唆している:

この場合
typedef NSNumber NSNumberBool; 

または多分を、より良いは次のようになります。その後、

#define NSNumberBool NSNumber 

と使用:

NSNumberBool *audio; 

それとも、あなたが行っているようにコメントを使います。

関連する問題