方法定义是否可以指定参数必须是常量?
问题描述:
所以,我想要做的事,如:方法定义是否可以指定参数必须是常量?
+ (void) replace_text_with: (NSString *) const predefined_text_style;
在哪里,我定义使用一个Constants.h和Constants.m常量字符串文件的其他一些文本样式。
我想要求作为predefined_text_style
传递的参数是其中的一个常数,如果不可能将其限制为那些常量,至少要求它是某种常数。这可能吗?
答
我在Objective-C中的知识有点生疏,但我敢打赌,不可能将参数限制为字符串的子集。我会建议是使用enums:
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中 - 在某些其他语言中可能会更容易)。然而,由于我对你的背景知之甚少,这些都是一些可能的解决方案。
感谢您的指点!实际上,你所说的正是我想要做的:使参数类型文档符合预期。 – 2012-07-23 16:10:27