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アプリ開発における定数定義の方法【最適解編】(本記事)
<お勧め書籍>