2010-07-17 74 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