我可能試圖濫用預處理器。我想看看我腦海裏有甚麼可能。使用C預處理器生成@property實現(大寫預處理器中的字符)
我的課有@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名稱。我需要將屬性名稱的第一個字母大寫,並且我不知道如何在預處理器中執行此操作。
是的,這是我想到的後備。感謝您確認CPP不具備執行我想要的那種操作的表達能力。 – iter