LoginSignup
49
44

More than 5 years have passed since last update.

Objective-Cでの定数定義について

Last updated at Posted at 2015-07-09

Objective-Cで定数を定義する方法を紹介します

定義方法

1. const

グローバル定数

Class.m
#import "Class.h"

const NSInteger kInt = 1;
const CGFloat kFloat = 10.f;
NSString *const kString = @"String";

@implementation Class

...

@end
Class.h
#import <Foundation/Foundation.h>

extern const NSInteger kInt;
extern const CGFloat kFloat;
extern NSString *const kString;

@interface Class : NSObject

...

@end

ローカル定数

Class.m
#import "Class.h"

static const NSInteger kInt = 1;
static const CGFloat kFloat = 10.f;
static NSString *const kString = @"String";

@implementation Class

...

@end

注意点

NSStringconst の位置に注意してください。
NSIntegerCGFloat と同じように

const NSString *kString = @"String";

と記述してしまうと、Objective-CではNSStringはオブジェクトなので、
const なNSStringオブジェクトへのポインタ となってしまいます。

2. Defineマクロ

#define INTEGER_VALUE 1
#define FLOAT_VALUE 10.f
#define STRING_VALUE @"String"

注意点

  1. 最後にセミコロンを記述しないようにしてください。
  2. こちらの方法は下記の理由により、個人的にはあまり推奨しません。
  • 型の指定がない
  • 同じ名前で定義してしまうと意図しないタイミングで定数置換が行われてしまう危険性がある

命名規則

定数の命名規則について紹介します

1. 先頭に k をつけ、単語の先頭の文字を大文字にする

Objective-Cで、1番よく見られる形です。
先頭の k はドイツ語の Konstant に由来するらしいです。

static const NSInteger kIntegerConstantValue = 1;

2. 先頭にプロジェクトの Class Prefix をつけ、単語の先頭の文字を大文字にする

enumで定義されている場合に、よく見られる形です。

static const NSInteger ABCIntegerConstantValue = 1;

3. 全て大文字で記述し、単語と単語の間に _ を入れる

C言語のDefineマクロで定義されている定数はこの形で記述されていることが多いですね。
僕もDefineマクロで定義しなくてはならない場合は、このように定義しています。

static const NSInteger INTEGER_CONSTANT_VALUE = 1;
49
44
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
49
44