タイトルが示すように-Javaでは、クラスに定数を定義させてから、それらを使用するクラスにインポートします。Objective-Cでも同じように行われますか?
明確にするために、私はしたい
#define variable 1
#define variable 2.0
また、異なるクラスで同じ定数を使用します。
タイトルが示すように-Javaでは、クラスに定数を定義させてから、それらを使用するクラスにインポートします。Objective-Cでも同じように行われますか?
明確にするために、私はしたい
#define variable 1
#define variable 2.0
また、異なるクラスで同じ定数を使用します。
マクロを使用する別の方法があります。それらをグローバル変数として定義できます。
Constants.hの場合:
extern int variableX;
extern float variableY;
Constants.m(通常はインポート後、他のコードの前):
int variableX = 1;
float variableY = 2.0f;
このアプローチには、マクロに比べていくつかの利点があります。
マクロをヘッダー ファイルに入れます。マクロにアクセスする必要があるときはいつでも、そのヘッダー ファイルに入れます#include
。#import
あなたの例は、C プリプロセッサ マクロを使用しています。これは、C スタイルのプリプロセッサ マクロをサポートする他の環境と同じように、Objective-C でも機能します。それらを共有ヘッダーに貼り付け#import
ます#include
。
それはまったく問題ありませんが、クラス関連の定数と、特に Objective-C について質問していました。Objective-C では、定数 NSString (通知名や辞書キーなど) や、次のように定義された特定のクラスに属する同様の定数をよく見かけます。
ヘッダー (.h):
extern NSString * const LibraryEntryDidUpdateNotification;
extern const NSUInteger LibraryEntryDefaultStarRating;
@interface LibraryEntry : NSObject
...
実装 (.m):
NSString * const LibraryEntryDidUpdateNotification = @"LibraryEntryDidUpdateNotification";
const NSUInteger LibraryEntryDefaultStarRating = 3;
@implementation LibraryEntry
...
これは、Apple が最新のフレームワークで行う方法であり、多くのサードパーティの開発者が行う方法です。私の意見では、プリプロセッサ マクロよりもリファクタリングの方が簡単です (たとえば、Xcode の「リファクタリング」ボタンを使用してクラスの名前を変更する場合、これらの定数でも同じことが簡単に機能します) が、定数のプリプロセッサ マクロにも利点があります。