【问题标题】:Can a method definition specify that a parameter must be a constant?方法定义可以指定参数必须是常量吗?
【发布时间】:2012-07-22 03:50:34
【问题描述】:

所以,我想做这样的事情:

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

我在其他地方的 Constants.h 和 Constants.m 文件中使用常量字符串定义了一些文本样式。

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

【问题讨论】:

    标签: objective-c methods constants


    【解决方案1】:

    我在 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 中不会——在其他一些语言中可能要容易得多)。但是,由于我对您的上下文了解不多,这些是一些可能的解决方案。

    【讨论】:

    • 感谢指点!其实你说的正是我想做的:让参数类型文档符合预期。
    猜你喜欢
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多