すべてのプロジェクトからアクセス可能な静的な値を含むクラスを作成したいと思います。
擬似コード:
class Constants:
constant String API_URL : "http://api.service.com"
constant Integer SOME_VALUE : 7
Objective-C
でこれを行うにはどうすればよいですか?
プリプロセッサを使用してそれを行うことができます:
#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
あなたの質問に対する答えは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」を使用でき、クラスをどこにもインポートする必要はありません。つまり、この変数はプロジェクトのどこでも直接使用できます。
必要なすべての定数を使用してSingleton
を作成できます ここにサンプルがあります
クラスを作成したくない場合は、静的プライベート変数と静的ゲッターを使用できます。
@interface
+(NSString*) getValue;
@end
@implementation
static NSString *_value = @"....";
+(NSString*) getValue {
return _value;
}
@end