繁体   English   中英

使用 objc 的 swift 扩展和类型差异

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM