2012-07-22 46 views
3

所以,我想要做的事,如:方法定义是否可以指定参数必须是常量?

+ (void) replace_text_with: (NSString *) const predefined_text_style; 

在哪里,我定义使用一个Constants.h和Constants.m常量字符串文件的其他一些文本样式。

我想要求作为predefined_text_style传递的参数是其中的一个常数,如果不可能将其限制为那些常量,至少要求它是某种常数。这可能吗?

回答

5

我在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中 - 在某些其他语言中可能会更容易)。然而,由于我对你的背景知之甚少,这些都是一些可能的解决方案。

+0

感谢您的指点!实际上,你所说的正是我想要做的:使参数类型文档符合预期。 – 2012-07-23 16:10:27

相关问题