我有以下情况:
方法:
-(void) myMethod:(id)inValue
{
long a = [inValue longValue];
}
编译器向我显示一条警告,表明 -longValue - 已相乘:
multiple methods named '-longValue' found
如何在不更改方法名称的情况下解决此警告?
谢谢!
最佳答案
强烈键入方法的参数以告诉编译器您要使用 -longValue
消息的哪种变体,例如:
-(void) myMethod:(NSNumber *)inValue
{
long a = [inValue longValue];
}
如果您想接受响应 -longValue
的多种类型(例如 NSNumber
和 NSString
),那么您必须回到使用id
,您会看到警告。您会看到,您的(是的,您的,不是 Apple 的)类层次结构中的某些内容已损坏并为 -longValue
使用了不同的签名,因此编译器无法知道您要使用哪一个。 id
告诉它“这是一个对象”,但它没有提供编译器可以用来解决其难题的明确信息。
您传递 id
而不是强类型对象是否有特殊原因?
关于objective-c - 在 cocoa 中进行类型转换以修复警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4526724/