2011-03-09 72 views
0

是否有类似于您可以使用NSObject作为任何对象的返回类型的方式的“任何基元”的返回类型?我尝试使用id,但编译器给我一个错误,它试图将原语转换为引用。基元的通用返回类型

这是我正在尝试做的。 :

-(void)setObject:(NSObject*)obj forKey:(NSString*)key { 
    [sharedInstance.variables setObject:obj forKey:key]; 
} 


-(NSObject*)getObjectForKey:(NSString*)key { 
    return [sharedInstance.variables objectForKey:key]; 
} 


-(void)setValue:(???)value forKey:(NSString*)key { 
    [sharedInstance.variables setValue:value forKey:key]; 
} 


-(???)getValueForKey:(NSString*)key { 
    return [sharedInstance.variables valueForKey:key]; 
} 

,我有虽然是使用独立的方法(getIntForKey,getFloatForKey等)来访问的值替代。

+0

有没有这样的东西作为一个通用的基元。如果有的话,那么它们就不会是“原始的”。你会发现最接近的(不需要在对象中填充值)是一个'void *',但是这需要你做很多很多的投射。 – 2011-03-09 15:52:09

回答

0

我终于完成了这个任务。最终的解决方案是每种类型都有独立的访问器/增变器方法。所以现在我有setIntForKey,setBoolForKey,getIntForKey,getBoolForKey等等。缺点很明显,因为我不能调用一种方法来设置值,而另一种方法来检索它们。然而,优点很多。由于编译器知道该方法在编译时期望的对象或基元类型,因此我可以在编译时检查所有这些方法。此外,我不必担心将检索到的值转换为其基本类型(显然返回的NSObjects是不同的故事)。

1

1)阅读键 - 值编码的XCode文档中的文章 - 所有答案都存在

2)有一个对象NSValue,它类似于你的“NSObject的”。 NSValue可以存储简单的旧数据。

PS

“标量和结构支持 键 - 值编码提供了一种通过自动包装,以及展开的NSNumber和NSValue实例值的,用于标量值和数据结构支持。 代表数据作为对象 的缺省实现valueForKey:和setValue:forKey:为非对象数据类型(标量和结构体)的自动对象包装提供支持 一旦valueForKey:确定了用于提供指定值的特定访问方法或实例变量键,它检查返回类型或数据类型。如果要返回的值不是对象,则为NSNumber或者为该值创建NSValue对象并在其位置返回。 同样,setValue:forKey:确定指定键的相应访问器或实例变量所需的数据类型。如果数据类型不是对象,那么使用相应的-Value方法从传递的对象中提取值。“

0

我会认为id在这里也是一个完美的候选人......这可能只是一个演员问题你看到的?

即ID隐含地意味着指针,以便在我的脑海我看到id作为目标C等同于C void*

在你有一个NSObject的*您可以将这段换句话说带有编号如

-(NSObject*)myMethod1 
{ 
} 

这样可以为任何完成返回原语

-(id)myMethod1 
{ 
} 

即不是id*

此外,我希望这只是一个复制/粘贴的事情,但柜面它也导致问题

-(void)setValue:(???)value forKey:(NSString*)key { 
    [sharedInstance.variables setValue:num forKey:key]; 
} 

应该可能是

-(void)setValue:(???)value forKey:(NSString*)key { 
    [sharedInstance.variables setValue:value forKey:key]; 
} 
+0

'id'是一个通用的Objective-C对象,它不等同于'void *' – kubi 2011-03-09 15:33:35