gpt4 book ai didi

objective-c - 使用 C 预处理器生成 @property 实现(在预处理器中大写一个字符)

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:23 27 4
gpt4 key购买 nike

我可能想滥用预处理器。我想看看我的想法是否可行。

我的类(class)有@properties,它们都具有相同的主体。我想用预处理器宏生成这些主体。例如:

- (float) accelerometerSensitivity {
return [dict floatForSelector:_cmd or:1];
}
- (void) setAccelerometerSensitivity:(float) n {
[dict setFloat:n forSelector:_cmd];
[dict writeToFile:[self globalDataFilename] atomically:YES];
}

- (float) returnSpringTension {
return [dict floatForSelector:_cmd or:0];
}
- (void) setReturnSpringTension:(float) n {
[dict setFloat:n forSelector:_cmd];
[dict writeToFile:[self globalDataFilename] atomically:YES];
}
// set*ForSelector methods are in a category on NSMutableDictionary and depend on a function that translates selectors into strings:
// NSString* keyFromSelector(SEL selector);

我的想法是,我不是使用字符串文字(或字符串常量)作为字典的键,而是从选择器名称派生字符串。通过这种方式,我可以确保键的拼写与属性名称相匹配,并且基本上可以从字典键的编译时验证中获益。

我想做的是说类似 SELECTOR_PROPERY(accelerometerSensitivity) 的内容,并将其扩展为 getter 和 setter。我将其作为预处理器宏实现的主要困难是从属性名称生成 setter 名称。我需要将属性名称的第一个字母大写,但我不知道如何在预处理器中执行此操作。

最佳答案

Nope, you can't do that.

但是,您可以组合标识符,因此理论上您可以将其定义为:

MACRO(A,a,ccelerometerSensitivity)

它有点笨拙,但比替代方案更简洁。

关于objective-c - 使用 C 预处理器生成 @property 实现(在预处理器中大写一个字符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6756848/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com