使用来自objc的swift扩展,并输入差异

时间:2015-11-11 08:01:51

标签: ios objective-c swift

我在模拟器iphone6及以上版本上遇到以下错误。

  

找到名为'intValue'的多个方法,结果不匹配,   参数类型或属性

在模拟器5及以下,没有错误。

违规代码

     func intValue() -> Int32 {
         return 0
     }

我怀疑这是由于我添加的快速扩展

==4501== 15,263,488 bytes in 59,623 blocks are definitely lost in loss record 5,941 of 5,942
==4501==    at 0x4C2BBA0: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4501==    by 0x6CC78D1: newlocale (newlocale.c:201)
==4501==    by 0x527EE7: app::TLocale::create(app::ELocale) (locale.cpp:141)
==4501==    by 0x5276AD: app::TLocale::TLocale() (locale.cpp:38)
==4501==    by 0x50091E: util::TDateTime::TDateTime(util::EDateTimeType) (datetime.cpp:828)
==4501==    by 0x587EE4: util::TVariant::TVariant() (variant.cpp:74)
==4501==    by 0x561215: data::TField::TField() (tables.cpp:193)
==4501==    by 0x554EA7: sqlite::TQuery::assignFields() (sqlite.cpp:631)
==4501==    by 0x553C80: sqlite::TQuery::next() (sqlite.cpp:415)
==4501==    by 0x4F8E06: sql::TDataQuery::fetchAll() (database.cpp:219)
==4501==    by 0x5CD499: app::TMain::qryPersonalData(std::string&, unsigned long, unsigned long, std::string const&, unsigned long) (main.cpp:1616)
==4501==    by 0x5CCF86: app::TMain::getPersonalData(app::TThreadData&, char const*&, unsigned long&, util::TNamedVariants&) (main.cpp:1568)

那么我是否应该担心代码无法在模拟器6及更高版本上编译?

**编辑**

似乎不同之处在于iPhone 5及更低版本为32位且iPhone5及以上版本为64位。

所以我应该返回比Int更精确的类型,可以是int32或int64。

现在我的代码如下所示,并想知道它是否是正确的解决方案

newlocale()

1 个答案:

答案 0 :(得分:1)

Objective-C方法期待C int。但是Swift Int 是C int。因此,指定Int32是正确的,因为 int相同,也因为它是intValue的其他实现返回。

当然,这表明方法名称intValue已在Objective-C中使用。 Objective-C没有重载,所以如果您要选择此名称,必须匹配现有签名(正如您现在所做的那样)。