[英]using swift extension from objc, and type difference
我在模拟器 iphone6 及更高版本上收到以下错误。
发现多个名为“intValue”的方法的结果、参数类型或属性不匹配
在模拟器 5 及以下,没有错误。
违规代码是
int destinationType = [[args objectForKey:@"destinationType"] intValue];
我怀疑这是由于我添加的快速扩展
extension NSNull {
func intValue() -> Int {
return 0
}
}
那么我应该担心代码不会在模拟器 6 及更高版本上编译吗?
** 编辑 **
似乎区别在于 iPhone 5 及以下为 32 位,而 iPhone5s 及以上为 64 位。
所以我应该返回比 Int 更精确的类型,它可以是 int32 或 int64。
现在我的代码如下所示,想知道它是否是正确的解决方案
func intValue() -> Int32 {
return 0
}
Objective-C 方法需要一个 C int
。 但是 Swift Int不是C int
。 因此,指定的Int32是正确的,因为这是一样的int
,也因为它是什么的其他实现intValue
回报。
当然,这带来了一个事实,即方法名称intValue
已经在 Objective-C 中使用。 Objective-C 没有重载,所以如果你要选择这个名字,你必须匹配现有的签名(就像你现在所做的那样)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.