1

得到这个错误,不明白为什么。

下面的这一行有效。请注意,settingVersion 和 settingRelease 都是字符串:

let isInserted = sharedInstance.database!.executeUpdate(sqlStatement, withArgumentsInArray: [settingRecord.settingVersion, settingRecord.settingRelease)

但是,如果我将 Int32 添加到组合中,其中 settingsTimesUsed 是 Int32,我会得到“_”不可转换为 Int32 错误。

let isInserted = sharedInstance.database!.executeUpdate(sqlStatement, withArgumentsInArray: [settingRecord.settingVersion, settingRecord.settingRelease, settingRecord.settingTimesUsed])

如果我将最终项目完全明确为 Int32,我也会得到同样的错误,例如

let a = 1 as Int32
let isInserted = sharedInstance.database!.executeUpdate(sqlStatement, withArgumentsInArray: [settingRecord.settingVersion, settingRecord.settingRelease, a])

有任何想法吗。

4

2 回答 2

2

添加一个Int32尝试将其从 移动[String][AnyObject]。Swift 永远不会自动推断Anyor AnyObject。如果需要,您必须明确说明。在这种情况下,这将是:

let settings: [AnyObject] = [settingRecord.settingVersion, settingRecord.settingRelease, settingRecord.settingTimesUsed]
let isInserted = sharedInstance.database!.executeUpdate(sqlStatement, withArgumentsInArray: settings)

也就是说,我会确保你真的想要那个。这抛弃了运行中的类型安全性executeUpdate

如果这是一个 ObjC 接口(通常是类型不安全的),那么它实际上可能需要一个NSArray. 在这种情况下,您可以通过调用来明确:

...withArgumentsInArray: NSArray(objects: settingRecord.settingVersion, settingRecord.settingRelease, settingRecord.settingTimesUsed))
于 2015-07-24T16:20:20.850 回答
1

如果您想保留其他变量的类型安全,而不是将整个数组转换为“AnyObject”,您可以将该特定变量转换为字符串来解决此问题。

例如

let settingTimesUsedString = String(settingRecord.settingTimesUsed)

let isInserted = sharedInstance.database!.executeUpdate(sqlStatement, withArgumentsInArray: [settingRecord.settingVersion, settingRecord.settingRelease, settingTimesUsedString])
于 2015-09-09T02:21:58.390 回答