0

例如,在文档中,一个 KVC 风格的验证方法是这样实现的:

-(BOOL)validateAge:(id *)ioValue error:(NSError **)outError

他们使用 id* 作为 ioValue 的类型。由于这不是方法签名的一部分,我想知道这样做是否会伤害:

-(BOOL)validateAge:(NSNumber *)ioValue error:(NSError **)outError

这对 KVC 还好吗?

4

1 回答 1

1

那是行不通的,因为它们不一样。id*会更接近,NSNumber**因为该方法接受指向指针的指针。所以你的方法看起来像:

-(void)validateAge:(NSNumber**)ioValue error:(NSError**)outError

但是这样做是没有意义的。id对于您需要做的所有事情都可以正常工作,如果您更改它然后稍后调整该属性,您可以并且会在您的应用程序中引入一个微妙的错误。

简短的回答,是的,您可以更改输入参数类型;但你真的不应该。

于 2010-06-14T16:07:17.153 回答