Возможно, я пытаюсь злоупотребить препроцессором.Я хочу посмотреть, возможно ли то, что я имею в виду.
У моего класса @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)
и получить егорасширить в геттер и сеттер.Основная трудность, с которой я столкнулся при реализации этого макроса препроцессора, заключается в создании имени сеттера из имени свойства.Мне нужно прописать первую букву имени свойства, и я не знаю, как это сделать в препроцессоре.