iOSアプリ開発における定数定義の方法【最適解編】

過去3回iOSアプリ開発における定数定義方法を紹介してきた。
iOSアプリ開発における定数定義の方法【基本編】
iOSアプリ開発における定数定義の方法【環境毎設定編】
iOSアプリ開発における定数定義の方法【マクロ使用編】

今回は現時点で筆者が考える最適な定数定義方法を紹介する。

<方法>
・条件によって変更されない定数は「#define」を使って定義する
・条件によって変更される定数は「extern」を使って定義する

理由としては、「extern」を使用する方法は条件によって変更される定数を定義できる反面、一つの定数を定義するために「.h」「.m」ファイルに追記する必要がある。
一方で、「#define」を使用する方法は一つの定数を定義するために「.h」ファイルに追記するだけでよい。
よって、これらの「いいとこ取り」をする訳である。

<サンプルコード>
AppConsts.h

#import <Foundation/Foundation.h>

@interface AppConsts : NSObject

/** サンプル定数(条件によって変更されない定数:文字列) */
#define SAMPLE_CONST_STRING @"本日は晴天なり"

/** サンプル定数(条件によって変更されない定数:数値) */
#define SAMPLE_CONST_INT 10

/** サンプル定数(条件によって変更される定数) */
extern NSString * const SAMPLE_CONST_SERVER;

@end

AppConsts.m

#import "AppConsts.h"

@implementation AppConsts

#if DEF_ENVIRONMENT == VAL_ENV_REAL

//本番環境時の定数設定
NSString * const SAMPLE_CONST_SERVER = @"https://real.server/";

#elif DEF_ENVIRONMENT == VAL_ENV_TEST

//テスト環境時の定数設定
NSString * const SAMPLE_CONST_SERVER = @"http://test.server/";

#endif

@end

プロジェクト名-Prefix.pch

//環境種別
#define VAL_ENV_TEST   0        //テスト環境
#define VAL_ENV_REAL   1        //本番環境

// 環境設定
#define DEF_ENVIRONMENT VAL_ENV_REAL
                         //↑この場所に設定する値によって環境を切り替える

<定数の使用方法>
定義した定数を使用するには、使用したいクラスで定数定義クラス「AppConsts.h」をimportし、定数を使用したい場所に定数名を記述する。

//使用するクラスに「AppConsts.h」をimportしておくこと
NSLog(@"%@", SAMPLE_CONST_STRING);
NSLog(@"%d", SAMPLE_CONST_INT);
NSLog(@"%@", SAMPLE_CONST_SERVER);

<実行結果>
「<プロジェクト名>-Prefix.pch」の「DEF_ENVIRONMENT」を「VAL_ENV_TEST」に設定した場合

2014-11-12 22:52:07.626 ConstsSample[14871:111021] 本日は晴天なり
2014-11-12 22:52:07.627 ConstsSample[14871:111021] 10
2014-11-12 22:52:07.627 ConstsSample[14871:111021] http://test.server/

「<プロジェクト名>-Prefix.pch」の「DEF_ENVIRONMENT」を「VAL_ENV_REAL」に設定した場合

2014-11-12 22:46:06.360 ConstsSample[14578:108199] 本日は晴天なり
2014-11-12 22:46:06.361 ConstsSample[14578:108199] 10
2014-11-12 22:46:06.361 ConstsSample[14578:108199] https://real.server/

Enjoy Programing!!

<関連記事>
iOSアプリ開発における定数定義の方法【基本編】
iOSアプリ開発における定数定義の方法【環境毎設定編】
iOSアプリ開発における定数定義の方法【マクロ使用編】
iOSアプリ開発における定数定義の方法【最適解編】(本記事)

<お勧め書籍>

詳解 Objective-C 2.0 第3版
iOSアプリ開発技術者として仕事をするのであれば、必ず読んでおくべき書籍である。
筆者も何度も繰り返し精読している。