【发布时间】:2023-03-27 15:24:02
【问题描述】:
我想编写一个宏来生成如下两种方法:
- (NSString*)propertyName
{
NSString *key = @"PropertyName";
//get value from NSUserDefaults
//...
}
- (void)setPropertyName:(NSString*)value
{
NSString *key = @"PropertyName";
//set value to NSUserDefaults
//...
}
get方法中属性名首字母小写,set方法和key值中大写。
宏应该接收 1 或 2 个参数,即属性名称:
MY_PROPERTY(propertyName)
或
MY_PROPERTY(PropertyName)
或
MY_PROPERTY(propertyName, PropertyName)
参数也是key 的值(字符串值)。
如何为此编写宏?我更喜欢第一个或第二个。谢谢。
【问题讨论】:
-
为什么人们把这个问题记下来了? (在我写这篇文章时它是-3。我现在正在投票。对我来说似乎是一个公平的问题。)
-
为什么要这样的宏?你的 setter 没有设置任何东西,你的 getter 很短,像往常一样写起来更容易。而且以后支持起来更容易。顺便说一句,您的 getter 也不会返回任何内容 :) 宏只会将 MY_PROPERTY 替换为某些内容,您将无法编辑
...s。可能你的意思是sn-p? (P.S. 我没有对你投反对票) -
@BergQuester + FreeNick 请注意,如果您想要在
...中保持不变,这将非常有用。例如,如果您有一个 PreferencesManager 并且您想从NSUserDefaults设置和获取属性,那么宏会非常好 -
我的应用有很多设置保存在
NSUserDefaults。我希望每个设置都有自己的 getter/setter。我不想到处复制那个代码。问题是我不知道如何: - 传递参数并更改其首字母大小写。 - 在 setter 中的名称前添加单词set。 - 将属性名称放在这样的字符串中:@"PropertyName"。这就是为什么您在代码中看到...,它与问题无关。 -
@Arnol — 您可能需要编辑您的问题以添加一些背景来解释目的(例如,
NSUserDefaults),因为它可以帮助我们更好地了解您的动机。正如我所怀疑的,你的动机似乎是有根据的。 :)
标签: objective-c xcode macros