3

だから、私は次のようなことをしたいです:

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

他の場所のConstants.hおよびConstants.mファイルで定数文字列を使用していくつかのテキストスタイルを定義したところ。

パラメータがこれらの定数の1つとして渡されることを要求したいのですが、predefined_text_styleそれらの定数に具体的に制限することが不可能な場合は、少なくとも何らかの定数である必要があります。これは可能ですか?

4

1 に答える 1

5

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));
}

列挙型の値の代わりに整数を渡すことができるため、これはあまり優れたソリューションではありませんが、少なくともパラメーターのタイプは、期待するものを文書化します。

もう1つの可能性は、インスタンスが文字列定数を格納する新しいクラスを作成することです。これらのインスタンスは、文字列ではなくパラメータとして渡されます。理論的には、定数として使用されるインスタンスに加えて、このクラスの新しいインスタンスを作成することもできますが、文字列を使用する場合よりも誤って作成することは困難です。

とにかく、私は両方の解決策が不必要なオーバーヘッドであると感じます。合格値をあまり制限することについて心配する必要はありません(少なくともObjective-Cではそうではありません-他のいくつかの言語でははるかに簡単かもしれません)。しかし、私はあなたの文脈についてあまり知らないので、それらはいくつかの可能な解決策です。

于 2012-07-22T03:59:10.067 に答える