我为getter方法编写了一个预处理器定义语句
#define GetNSStringDefaultForPropertyWithNameAndKey(propertyName, propertyKey) - (NSString *)propertyName { return [[NSUserDefaults standardUserDefaults] objectForKey:_userDefaultsKey][propertyKey]; }
但在为setter方法执行相同操作时遇到困难,因为我必须将propertyName参数修改为setPropertyName。
有没有办法进行这种参数修改。
EDIT 我应该说两个定义都应该覆盖编译器生成的getter / setter方法。 但是,如果我让Matthias正确,唯一的方法是提供有问题的属性的大写版本,就像这样。
#define SetNSStringDefaultForPropertyWithNameAndKey(PropertyName, propertyKey) - (void)set ## PropertyName:(NSString *)newValue \
{ \
self.userDefaults[propertyKey] = newValue; \
[self updateUserDefaults]; \
} \
答案 0 :(得分:1)
您可以使用##
将两个令牌连接在一起。但是,预处理器无法更改令牌的大小写。所以你必须自己提供一个大写的属性名称。
这样的事情应该有效
#define SetNSStringDefaultForPropertyWithNameAndKey(propertyName, propertyKey) - (void)set ## propertyName:(id)object { [[NSUserDefaults standardUserDefaults] objectForKey: _userDefaultsKey][propertyKey] = object; }
由于预处理器无法更改为大写,因此您必须提供首字母大写的属性名称
SetNSStringDefaultForPropertyWithNameAndKey(Foobar, @"foobar")
GetNSStringDefaultForPropertyWithNameAndKey(foobar, @"foobar")