得到此错误但不明白原因。
以下这一行有效。请注意,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])
任何想法。
答案 0 :(得分:2)
添加Int32
次尝试将其从[String]
移至[AnyObject]
。 Swift永远不会自动推断Any
或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))
答案 1 :(得分:1)
如果要保留其他变量的类型安全性,而不是将整个数组转换为“AnyObject”,您可以将该特定变量强制转换为字符串以解决此问题。
例如
let settingTimesUsedString = String(settingRecord.settingTimesUsed)
let isInserted = sharedInstance.database!.executeUpdate(sqlStatement, withArgumentsInArray: [settingRecord.settingVersion, settingRecord.settingRelease, settingTimesUsedString])