2011年6月1日水曜日

getterのブラケット記法をドットに置き換える方法

注意:
ドット記法が使えないgetterの多くは、何らかの意図があってドット記法を許さないようにしていると推測できます。
乱用は控えましょう。


Objective-Cでは、ヘッダで @property を用いてアクセサを定義した場合のみ
メソッドをドット記法で呼び出すことができます。
(該当メソッドが存在すれば呼ぶことはできますが、警告が出るはずです。)

また、Objective-Cでは、カテゴリを用いて既存のオブジェクトを拡張することができます。

この二つの機能を用いて、
ドット記法で呼び出せないはずのインスタンスメソッド
をドット記法で呼び出せるようにできます。

やり方:

//
//  NSString+dotOperator.h
//  M2
//

@interface NSString (dotOperator)

@property (readonly) NSUInteger length;

@end


//
//  NSString+dotOperator.m
//  M2
//

#import "NSString+dotOperator.h"

@implementation NSString (dotOperator)

@dynamic length;

@end



上記の例では、

- [NSString length]

をドット記法で呼び出せるようにしました。
この拡張を使いたいファイル(もしくは***.pch)で

#import "NSString+dotOperator.h"

とすることで、下記のような書き方が可能になります。

NSLog(@"%d", @"abc".length);


括弧の入れ子が少なくなって便利ですが、使いどころを考えないとハマる可能性はありますよね!

0 件のコメント:

コメントを投稿