オブジェクト定数が欲しい
Javaでよく使うイディオムとして、共通で使うオブジェクトをスタティックな定数として定義しておくものがある。
スタティックな定数 (Java)
public class LoggerView extends View { public static final UIColor COLOR_ERROR = UIColor.getColor(RED); public static final UIColor COLOR_ALERT = UIColor.getColor(ORANGE); public static final UIColor COLOR_INFO = UIColor.getColor(WHITE); //呼び出し側 textBox.setTextColor = LoggerView.COLOR_ERROR; 〜 }
Objective-Cでは一部のクラス(NSString*等)以外、同様の書き方は出来ないので
static UIColor* const COLOR_ERROR = [UIColor redColor];
これは"initializer element is not a compile-time Constant"と怒られるのだ。...
結果、私には以下のようにクラスメソッドで書く方法しか思いつかなかった。
スタティックな定数風メソッド (Objective-C)
@implementation LoggerView { + (UIColor*)COLOR_ERROR { return [UIColor redColor]; } + (UIColor*)COLOR_ALERT { return [UIColor orangeColor]; } + (UIColor*)COLOR_INFO { return [UIColor whiteColor]; } //呼び出し側 textBox.textColor = LoggerView.COLOR_ERROR; 〜
今のObjective-Cはピリオド記法を使えるので見た目にはそれっぽいのだが、やはり気持ちが悪い。 (先日紹介したマクロによる記法もコードとして展開されるので結果は変わらない) やってることは同じなんだけどな。