更改#define参数

时间:2013-06-05 06:38:29

标签: ios preprocessor

我为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]; \
} \

1 个答案:

答案 0 :(得分:1)

您可以使用##将两个令牌连接在一起。但是,预处理器无法更改令牌的大小写。所以你必须自己提供一个大写的属性名称。

这样的事情应该有效

#define SetNSStringDefaultForPropertyWithNameAndKey(propertyName, propertyKey) - (void)set ## propertyName:(id)object { [[NSUserDefaults standardUserDefaults] objectForKey: _userDefaultsKey][propertyKey] = object; }

由于预处理器无法更改为大写,因此您必须提供首字母大写的属性名称

SetNSStringDefaultForPropertyWithNameAndKey(Foobar, @"foobar")

GetNSStringDefaultForPropertyWithNameAndKey(foobar, @"foobar")