【Objective-C】staticな定数なNSArray
を作ろうとして、NSStirngと同じように定義したらXcodeに怒られた。
// hoge.h extern NSArray * const kHoge; //hoge.m NSArray * const kHoge = @[@"hoge", @"fuga"];
Xcodeさん「Initializer element is not a compile-time constant」
どうやらNSStringの要領では出来ないらしい。。。
いろいろそれっぽいやり方は出てきたけど、下記のやり方が一番しっくりくるような気がする。
How do I declare an array as a constant in Objective-c? - Stack Overflow
(2) Declare a convenient class method that returns the array, then use a static NSArray *myArray within that method and treat it as a singleton (search SO for "objective-c singleton" for about a zillion answers on how to instantiate).
ほかにシンプルで良い方法ないのかな。。。
2015/10/20 追記
NSArrayは諦めて、Cの配列を使うことにした。。。
iPhone - objective-cで (const修飾子で) 配列を定数としたいとき - Qiita
どうやらCの配列の要素を取得するのは結構面倒らしくて、 上記の参考にさせていただいたサイトでは配列の要素数も定数にて定義していた。
どうにか要素数の定義を省けないかとググってみたところ、 下記のサイトに配列の要素数を取得するマクロが紹介されていたので拝借しました。
HogeArrayConst.h
#import <Foundation/Foundation.h> /** 配列のサイズを取得するマクロ */ #define GET_ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])); @interface HogeArrayConst : NSObject extern NSString *const HOGE_FUGA_PIYO[3]; @end
HogeArrayConst.m
#import "HogeArrayConst.h" @implementation NSString *const HOGE_FUGA_PIYO[] = {@"hoge", @"fuga", @"piyo"}; @end
利用時
#import "HogeArrayConst.h" /*---------------略---------------------*/ - (void)hogeMethod { int arraySize = GET_ARRAY_SIZE(HOGE_FUGA_PIYO); for(int i=0; i<arraySize; i++) { NSLog(@"%@", HOGE_FUGA_PIYO[i]); } }