Может ли определение метода указать, что параметр должен быть константой?
Итак, я хочу сделать что-то вроде:
+ (void) replace_text_with: (NSString *) const predefined_text_style;
Где я определил некоторые стили текста, используя константные строки в файле Constants.h и Constants.m в другом месте.
Я хочу требовать, чтобы параметр передавался как predefined_text_style
является одной из этих констант, и если невозможно специально ограничить ее этими константами, по крайней мере, требуется, чтобы она была некоторой константой. Это возможно?
1 ответ
Мои знания в Objective-C немного устарели, но держу пари, что невозможно ограничить параметры подмножеством строк. Я бы порекомендовал использовать перечисления:
typedef enum {
FOOMy1stValue,
FOOMy2ndValue,
FOOMy3rdValue
} FOOEnum;
В конце концов, получить константные строки на основе значения перечисления:
NSString *FOOGetStringFromEnum(FOOEnum e) {
static NSString *strings[] = {
@"My first value",
@"My second value",
@"My third value"
};
return strings[e];
}
Как в:
void FOORestrictedInput(FOOEnum e) {
NSLog(@"Restricted string: %@", FOOGetStringFromEnum(e));
}
Это не слишком удачное решение, потому что вы можете передавать целые числа вместо значений перечисления, но, по крайней мере, тип параметра документирует то, что вы ожидаете.
Другая возможность - создать новый класс, экземпляры которого будут хранить строковые константы. Эти экземпляры будут передаваться как параметры, а не как строки. Теоретически, все еще можно создавать новые экземпляры этого класса в дополнение к тем, которые используются в качестве констант, но сделать это случайно сложнее, чем при использовании строк.
Во всяком случае, я чувствую, что оба решения являются ненужными накладными расходами. Я бы не стал слишком сильно ограничивать допустимые значения (по крайней мере, в Objective-C - это может быть намного проще в некоторых других языках). Однако, поскольку я не знаю много о вашем контексте, это некоторые возможные решения.