objective-c - 在 cocoa 中进行类型转换以修复警告

标签 objective-c cocoa casting

我有以下情况:

方法:

-(void) myMethod:(id)inValue
{
     long a = [inValue longValue];
}

编译器向我显示一条警告,表明 -longValue - 已相乘:

multiple methods named '-longValue' found

如何在不更改方法名称的情况下解决此警告?

谢谢!

最佳答案

强烈键入方法的参数以告诉编译器您要使用 -longValue 消息的哪种变体,例如:

-(void) myMethod:(NSNumber *)inValue
{
     long a = [inValue longValue];
}

如果您想接受响应 -longValue 的多种类型(例如 NSNumberNSString),那么您必须回到使用id,您会看到警告。您会看到,您的(是的,您的,不是 Apple 的)类层次结构中的某些内容已损坏并为 -longValue 使用了不同的签名,因此编译器无法知道您要使用哪一个。 id 告诉它“这是一个对象”,但它没有提供编译器可以用来解决其难题的明确信息。

您传递 id 而不是强类型对象是否有特殊原因?

关于objective-c - 在 cocoa 中进行类型转换以修复警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4526724/

相关文章:

objective-c - NSScrollView 内容和滚动条插图

c - 函数地址转换为 char 数组

WKWebView 中的 javascript 桥不起作用

ios - 根据相应表格单元格文本字段的更改更新表格 View 单元格的 subview

ios - 从 Swift 转换为 Objective-c 的工具

cocoa - Interface Builder > Inspector > Bindings 中的 "Controller Key"是什么意思?

objective-c - [NSMutableDictionary dictionaryWithDictionary :] and mutableCopy? 之间有区别吗

objective-c - 如何判断是否需要释放一个对象?

c++ - 没有类型转换的空指针

java - Guice,扩展接口(interface)和构造函数返回类型