ite*_*ter 4 objective-c c-preprocessor
我可能试图滥用预处理器.我想知道我的想法是否可能.
我的班级@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);
Run Code Online (Sandbox Code Playgroud)
我的想法是,不是使用字符串文字(或字符串常量)作为字典中的键,而是从选择器名称派生字符串.这样我确信密钥的拼写与属性名称匹配,并且基本上获得了字典密钥的编译时验证的好处.
我想要做的就是说出类似的内容SELECTOR_PROPERY(accelerometerSensitivity)并让它扩展到getter和setter中.我作为预处理器宏实现它的主要困难是从属性名称生成setter名称.我需要将属性名称的第一个字母大写,并且我不知道如何在预处理器中执行此操作.
但是,您可以组合标识符,因此理论上您可以将其定义为:
MACRO(A,a,ccelerometerSensitivity)
Run Code Online (Sandbox Code Playgroud)
它有点像klugey,但它比替代品更简洁.
| 归档时间: |
|
| 查看次数: |
931 次 |
| 最近记录: |