我有一个具有许多属性的类。设置每个属性后,我需要更新应用程序的 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");
@结尾
放弃这种技术感觉太接近了。有没有人有什么建议?