※本記事は、旧ブログからの再掲です。
定数についての備忘録です。
整数の定数(列挙型)
整数値をとる関連定数のグループには列挙を使用します。
列挙定数には、自動的に先頭から順番に0, 1, 2,…と1ずつ加算された値が代入されます。
また整数値を代入することも可能です。一部のみ代入した場合には、その後ろは前の値に+1された値が代入されます。
1 2 3 4 5 |
typedef enum { NotReachable = 0, ReachableViaWiFi, ReachableViaWWAN } NetworkStatus; |
また下記のように書くと、データ型の指定もできます。
1 2 3 4 5 |
typedef NS_ENUM(NSUInteger, NetworkStatus) { NotReachable = 0, ReachableViaWiFi, ReachableViaWWAN }; |
整数・浮動小数点値の定数
他の定数と関連がない整数の定数、浮動小数点値の定数はconst修飾子を使用します。
(const修飾子を付けた変数は、初期化時以降は値の変更ができません)
実装ファイル内のみで参照できるようにするには、static指定子を付けて定義します。
1 2 3 |
static const NSUInteger kNumImages = 5; static const CGFloat kScrollObjHeight = 280.0; |
外部からも参照できるようにするには、ヘッダにextern指定子を付けて宣言し、実装ファイル内で定義します。
<ヘッダファイル xxx.h>
1 2 3 |
extern const NSUInteger kNumImages; extern const CGFloat kScrollObjHeight; |
<実装ファイル xxx.m>
1 2 3 |
const NSUInteger kNumImages = 5; const CGFloat kScrollObjHeight = 280.0; |
文字列の定数
文字列の定数の場合には、以下のように定義します。
実装ファイル内のみで参照できるようにするには、static指定子を付けて定義します。
1 |
static NSString * const kNameKey = @"nameKey"; |
外部からも参照できるようにするには、ヘッダにextern指定子を付けて宣言し、実装ファイル内で定義します。
<ヘッダファイル xxx.h>
1 |
extern NSString * const kNameKey; |
<ヘッダファイル xxx.m>
1 |
NSString * const kNameKey = @"nameKey"; |
※上記例では、一部Appleのコード(サンプル等)から引用しています。
Appleドキュメントの「Cocoa向けコーディングガイドライン」によると、
原則として、#defineプリプロセッサコマンドを定数の作成に使用しないでください。
整数定数の場合、列挙を使用し、浮動小数点定数にはconst修飾子を使用します。
とのことです。