ページ

2010年5月31日月曜日

Objective-C カテゴリでプロパティ

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

例えばこんなクラスがあるとする。

Customer.h

@interface Customer :  NSManagedObject  
{
}

@property (nonatomic, retain) NSString * address1;
@property (nonatomic, retain) NSString * postcode;
@property (nonatomic, retain) NSString * lastname;
@property (nonatomic, retain) NSString * address2;
@property (nonatomic, retain) NSString * firstname;
@property (nonatomic, retain) NSDate * birthdate;
@property (nonatomic, retain) NSString * firstnameKana;
@property (nonatomic, retain) NSString * lastnameKana;

@end



birthdate(誕生日)から現時点での年齢を計算したいのだが、これをプロパティとして取得できるようにしたい。これをカテゴリで実装する。

こんな感じ。

Customer+Extension.h

#import "Customer.h"

@interface Customer (Extension)

@property (assign, nonatomic, readonly) NSInteger age;

@end


追加メソッドをプロパティとして実装できる。

@implementation Customer (Extension)

- (NSInteger)ageForBirthday_:(NSDate *)dateOfBirth {
  :
}

- (NSInteger)age
{
return [self ageForBirthday_:self.birthdate];
}



これを使う場合はこんな感じ。

#import "Customer+Extension.h"



cell.detailTextLabel.text =
[NSString stringWithFormat:@"%d", customer.age];


参考)
Calculate age in objective-c | I ticked the wrong box

Cocoaの日々: CoreData - Xcodeでモデルクラスを自動生成する