8

私は着実にObjective-Cのコツをつかんでいますが、まだ非常に初心者であり、初心者レベルの質問があり、誰かが光を当ててくれることを願っています:

非常に単純なプロジェクトがあり、全体で使用する定数を設定したい場合 (たとえば、キーが月名で値がその月の日付である NSDictionary など)、これはどのように行われるのでしょうか? (つまり、どのコマンド形式で、どこに置くか?)

注: この例が組み込み関数を使用してすでに可能である場合、おそらく、この質問の目的ではないふりをすることができます;)

4

4 に答える 4

19

答えは、定数のタイプによって異なります。intまたはのみが必要な場合は、doubleプリプロセッサと#define CONST 123構文を使用できます。ただし、Objective C クラスの場合は、さらに多くの作業を行う必要があります。

具体的には、クラス メソッドまたは独立関数の背後にある定数を非表示にする必要があります。また、そのメソッドまたは関数のプロトタイプをヘッダー ファイルに追加し、関数スコープの静的変数を提供して定数を格納し、それを初期化するコードを追加する必要があります。

シンプルな を使用した例を次に示しNSDictionaryます。

ヘッダー: MyConstants.h

@interface MyConstants
+(NSDictionary*)getConstDictionary;
@end

実装: MyConstants.m

+(NSDictionary*)getConstDictionary {
    static NSDictionary *inst = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        inst = @{
            @"key1": @"value1",
            @"key2": @"value2",
            @"key3": @"value3"
        };
    });
    return inst;
}

使用法:

NSString *val = [[MyConstants getConstDictionary] objectForKey:@"key2"];
于 2012-11-05T15:18:32.210 に答える
2

URLを保持するクラスでNSString定数を宣言するとします。ヘッダーの.hファイルには、次のものが必要です。

#import 

extern NSString * const BaseURL;

@interface ClassName : NSObject {

次に、メインの.mファイルに次のように値を設定する必要があります。

#import "ClassName.h"

NSString * const BaseURL = @"http://some.url.com/path/";

@implementation ClassName

これで、1つまたは複数のクラス全体でこの定数にアクセスできます。使用例は次のとおりです。

NSString *urlString = [NSString stringWithFormat:@"%@%@", BaseURL, @"filename.html"];
于 2012-11-05T15:20:03.347 に答える
0

定数が文字列の場合、次の形式を使用できます。

MyObject.h:

extern NSString *const kJanuary;
....
extern NSString *const kDecember;

@interface MyObject : NSObject
{
    ...
}

@end

MyObject.m:

NSString *const kJanuary = @"January";
....
NSString *const kDecember = @"December";

@implementation MyObject

....

@end

kJanuaryたとえば、クラスを使用するときにどこからでも定数を使用できます。

于 2012-11-05T15:16:28.927 に答える