我在模拟器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()
答案 0 :(得分:1)
Objective-C方法期待C int
。但是Swift Int 不是C int
。因此,指定Int32是正确的,因为 与int
相同,也因为它是intValue
的其他实现返回。
当然,这表明方法名称intValue
已在Objective-C中使用。 Objective-C没有重载,所以如果您要选择此名称,必须匹配现有签名(正如您现在所做的那样)。