いくつかのプロパティを持つクラスがあります。各プロパティを設定したら、アプリケーションのUIを更新する必要があります。セッターは次のようになります。
@synthesize trackHighlightColour = _trackHighlightColour;
- (void)setTrackHighlightColour:(UIColor *)trackHighlightColour
{
_trackHighlightColour = trackHighlightColour;
[self updateUI];
}
これを10回入力するのではなく、マクロを使用したいと思います。これは私がこれまでに持っているものです:
#if !defined(PROPERTY_SETTER)
#define PROPERTY_SETTER(PROPERTY_NAME, UPPER_PROPERTY_NAME) @synthesize (PROPERTY_NAME) = _(PROPERTY_NAME);\
\
- (void)set(UPPER_PROPERTY_NAME):(UIColor *)(PROPERTY_NAME)\
{\
_(PROPERTY_NAME) = (PROPERTY_NAME);\
[self updateUI];\
}
#endif
残念ながら、これにはいくつかの問題があります。
- (マイナー)両方の大文字小文字でプロパティ名を繰り返す必要がある
コンパイラはプロパティ名を渡すことを許可していません。代わりに、文字列として渡す必要があります。
@implementation FooClass
PROPERTY_SETTER(@ "trackHighlightColour"、 "TrackHighlightColour");
@終わり
このテクニックをあきらめるには近すぎると感じます。誰か提案はありますか?