web-dev-qa-db-ja.com

Objective-Cで定義された静的定数値を持つクラス

すべてのプロジェクトからアクセス可能な静的な値を含むクラスを作成したいと思います。

擬似コード:

class Constants:
  constant String API_URL : "http://api.service.com"
  constant Integer SOME_VALUE : 7

Objective-Cでこれを行うにはどうすればよいですか?

16
hsz

プリプロセッサを使用してそれを行うことができます:

#define API_URL @"http://api.service.com"
#define SOME_VALUE (7)

定義へのアクセスは簡単です:[object do:API_URL];

または、定数を使用できます

NSString * const apiURL = @"http://api.service.com";
NSNumber * const someValue = @7;

Constへのアクセスは変数へのアクセスに似ているため、文字列は単純な呼び出しになります。 NSNumberはプリミティブのオブジェクトラッパーであるため、次のようにアクセスする必要があります。someValue.intValue

9
Ryan Poolos

あなたの質問に対する答えはexternキーワードです。例を使って説明します。プロジェクトにObjectiveCクラスを追加し、Common、Now inCommon.hという名前を付けます。

     @interface Common : NSObject

     extern NSString *SiteApiURL;

     @end

Externキーワードを使用してNSStringクラスのインスタンスを定義した後、Common.mクラスに切り替えて、NSString(SiteApiURL)の値を初期化する必要があります。

     #import "Common.h"

     @implementation Common

     NSString *SiteApiURL = @"http://api.service.com";

     @end

このようにproject-Prefix.pchファイル内にCommon.hクラスをインポートします

    #import <Availability.h>

    #ifndef __IPHONE_3_0
    #warning "This project uses features only available in iOS SDK 3.0 and later."
    #endif

    #ifdef __OBJC__
        #import <UIKit/UIKit.h>
        #import <Foundation/Foundation.h>
        #import "Common.h"
    #endif

これで、プロジェクト全体のどこでもオブジェクト「SiteApiURL」を使用でき、クラスをどこにもインポートする必要はありません。つまり、この変数はプロジェクトのどこでも直接使用できます。

13
Gaurav Rastogi

必要なすべての定数を使用してSingletonを作成できます ここにサンプルがあります

クラスを作成したくない場合は、静的プライベート変数と静的ゲッターを使用できます。

@interface

+(NSString*) getValue;

@end


@implementation

static NSString *_value = @"....";

+(NSString*) getValue {
   return _value;
}

@end
1
B.S.