2012-07-22 65 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

相關問題