“_”不能转换为 Int32 - Swift

"_" is not convertible to Int32 - Swift

出现这个错误,不明白为什么。

下面这行有效。注意settingVersion和settingRelease都是Strings:

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])

任何想法。

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

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))

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

例如

let settingTimesUsedString = String(settingRecord.settingTimesUsed)

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