頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


構造体の定義部分にカテゴリで拡張しておく

頭と尻尾はくれてやる! NSMutableArrayのカテゴリを使って構造体を配列に出し入れしたい
↑この記事ではあきらめたって書いたんだけどその後ちょいと変更したんだ。
と言っても問題がすっきり解決したわけじゃなくて運用上の変更で対応したんだよ。

自分で作った構造体があるとして、、、例えばアドレス帳管理アプリの
typedef struct {
    NSString *name;
    int age;
    NSString *address;
} Address_t;
こんな構造体とかね。

通常この構造体の定義をどこでやるのかな?実は俺自身も今まで結構あいまいで単に「不具合が起きない場所」に置く程度だったんだよ。
最近コードの再利用を心がけるようになってから、定義専用の別ファイルを作っておいてそこに記述するようにしてるんだ。使う時にファイルでいちいちインポートするのが面倒なので、プロジェクトにあるpchファイルでインポートしてる。
別ファイルにして置く、と決めておくとどこに記述してあるかがすぐにわかるのがいいんだよね。
今回新たに追加したマイルールがこういう構造体を扱うカテゴリの記述を構造体の定義ファイルに一緒に記述しておく、ってこと。
これならカテゴリ記述部分はこの構造体は何者かってのがわかってるわけで次のように書けるんだよね。
//ヘッダーファイル(.h)
typedef struct {
    NSString *name;
    int age;
    NSString *address;
} Address_t;

@interface NSMutableArray (AddAddress_t)
-(void)addAddress:(Address_t)addressInfo;
@end

@interface NSArray (GetAddress_t)
-(Address_t)addressAtIndex:(int)index;
@end

//実装ファイル(.m)
@implementation NSMutableArray (AddAddress_t)
-(void)addAddress:(Address_t)addressInfo
{
    NSValue *value = [NSValue value:&addressInfo withObjCType:@encode(Address_t)];
    [self addObject:value];
}
@end

@implementation NSArray (GetAddress_t)
-(Address_t)addressAtIndex:(int)index
{
    NSValue *value = [self objectAtIndex:index];
    Address_t addressInfo;
    [value getValue:&addressInfo];
    return addressInfo;
}
@end
これでとりあえず
//追加時
{
    [array addAddress:addressInfo];
}
//取り出す時
{
    Address_t addressInfo = [array addressAtIndex:0];
}
みたいな記述が実現できるし、簡単に管理ができそうな気がするんだけどどうだろう。
不具合出てやめるようならまた追記するよ。



<< ステータスバーの上層にビューを表示させたい   TopPage  Skype支払い時に注意したいブラウザによる表示内容の違い >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/764-31a87e25




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad