2015-07-01 83 views
0

我已經宣佈了幾個字符串在.h文件中恆:如何強制一個參數成爲一個常量?

extern NSString *const kServiceName1; 
extern NSString *const kServiceName2; 

而在.m文件賦值給他們:

NSString *const kServiceName1 = @"service1"; 
NSString *const kServiceName2 = @"service2"; 

我現在有一個方法聲明這需要一個這些服務名稱常量作爲參數,我想強制它總是採取一個常量。喜歡的東西:

- (BOOL)serviceHasProfileUrl:(NSString const*)serviceName; 

然而,即使我設法執行它是一個常量,它並不能阻止我傳遞不在服務名稱的常量。我真正追求的是一種帶字符串的枚舉,或者一種定義一些類型的方法,它有幾個可以被稱爲常量的字符串值。

我以一個普通的枚舉開始,但最後我需要服務名稱爲正確的字符串,因爲這是數據庫中所需的表示形式,並且如果有一個簡單的解決方案,將刪除大量的序列化的複雜性。

回答

1

由於無法創建字符串enum,因此爲什麼不使用正常的enum?無論如何,將服務表示爲字符串似乎沒有優勢。

typedef enum { 
    Service1, 
    Service2 
} Service; 

- (BOOL)serviceHasProfileUrl:(Service)service; 

編輯(後問題編輯):

沒有理由使用字符串只是因爲這是服務如何在一些外部系統表示。

而是提供映射等。無論是要求對外表示:

NSDictionary *serviceDatabaseMapping = @{ 
    @(Service1): @"service1database", 
    @(Service2): @"service2database" 
}; 

NSString *databaseMapping = serviceDatabaseMapping[service]; 
+0

謝謝你 - 請編輯到原來的問題。 – Elise

+0

@Elise確定,已更新。實際上,您可能需要調整該字典,因爲目前還不清楚「@(枚舉)」在沒有編譯器呻吟的情況下會起作用。 – Droppy

相關問題