2010-07-17 75 views
2

在我的objective-c應用程序中有一個配置類,它用配置數據讀取PLIST文件。然後我想能夠與單一的功能來讀取任意鍵的值,這樣的事情:Objective-C函數中的可變返回類型(使用Cocoa)

-() getValueforKey:(NSString *)key { 
    some magic here.... 
    return value; 
} 

問題:一些在配置文件中的值都是字符串,其他都是整數,甚至字典。正如你所看到的,我在這個例子中留下了返回類型的空白,因爲我不知道該寫什麼。有什麼辦法可以讓一個函數返回不同類型的數據,如果有的話,我該如何聲明這個?

非常感謝!

回答

5

最安全的是爲每種類型的一個獨特的方法,你支持:

- (NSString *)stringForKey:(NSString *)key; 
- (int)intForKey:(NSString *)key; 
- (float)floatForKey:(NSString *)key; 
- (NSDictionary *)dictionaryForKey:(NSString *)key; 
... 

你可以提供一個通用的一個的情況下,調用方不希望一般工作:

- (id)objectForKey:(NSString *)key; 

在這種情況下,您將返回NSString *,NSNumber *,NSDictionary *

+0

我在想第一個,但我更喜歡單個函數。非常感謝! – Robin 2010-07-17 11:02:26

+0

如果你發現自己寫了很多基於'isKindOfClass:'的條件代碼,它通常表明你的代碼沒有遵循與框架一致的模式。 – bbum 2010-07-17 18:50:06

1

利用Objective-C的動態類型與ID

- (id) getValueforKey:(NSString *)key { 
    some magic here.... 
    return value; 
} 
+2

不適用於'int','float'和其他非對象數據類型。 – 2010-07-17 12:08:36