0

我为 getter 方法编写了一个预处理器定义语句

#define GetNSStringDefaultForPropertyWithNameAndKey(propertyName, propertyKey) - (NSString *)propertyName { return [[NSUserDefaults standardUserDefaults] objectForKey:_userDefaultsKey][propertyKey];  }

但是在对 setter 方法执行相同操作时卡住了,因为我必须将 propertyName 参数修改为 setPropertyName。

有没有办法做这种参数修改。

编辑我应该说这两个定义都应该覆盖编译器生成的 getter/setter 方法。但如果我猜对了马蒂亚斯,唯一的方法就是像这样提供所讨论属性的大写版本。

#define SetNSStringDefaultForPropertyWithNameAndKey(PropertyName, propertyKey) - (void)set  ## PropertyName:(NSString *)newValue \  
{ \  
    self.userDefaults[propertyKey] = newValue; \
    [self updateUserDefaults]; \
} \
4

1 回答 1

1

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

像这样的东西应该工作

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

并且因为预处理器不能更改为大写,所以您必须提供首字母大写的属性名称

SetNSStringDefaultForPropertyWithNameAndKey(Foobar, @"foobar")

GetNSStringDefaultForPropertyWithNameAndKey(foobar, @"foobar")
于 2013-06-05T06:55:23.780 回答