私のプロジェクトでは、通常、ivar のいくつかのプロパティをゲームオブジェクトのインターフェースに公開する必要がある複合オブジェクト (ゲームオブジェクト) があります。たとえば、ゲームオブジェクトには「位置」プロパティを持つスプライトがあり、スプライトの位置をゲームオブジェクトのプロパティとして使用したいとします。これは簡単です:
// GameObject.h
@interface GameObject : NSObject
@property CGPoint position;
...
@end
// GameObject.m
@interface GameObject ()
@property Sprite* sprite; // private property
@end
@implementation
- (CGPoint)position { return sprite.position; };
- (void)setPosition:(CGPoint)p { sprite.position = p; };
...
サイド プロジェクトとして、C マクロを使用してゲッター/セッターを生成することを検討しています。理想的には、私はできるでしょう:
@implementation
EXPOSE_SUBCOMPONENT_PROPERTY(subcomponent,propertyName,propertyType);
...
私の最近の失敗した試みは次のとおりです。
#define EXPOSE_SUBCOMPONENT_PROPERTY(sub,property,type) \
- (type)property { id x = sub; return x.##property;} \
- (void)setProperty:(type)set_val { id x = sub; x.##property = set_val; } \
助けてくれるマクロウィザードはありますか? 次に、マクロにプロパティの型を指定する必要がないようにする方法はありますか?