“_”不能转换为 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 永远不会自动推断出 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))
如果您想保留其他变量的类型安全性,而不是将整个数组转换为 'AnyObject',您可以将该特定变量转换为字符串来解决此问题。
例如
let settingTimesUsedString = String(settingRecord.settingTimesUsed)
let isInserted = sharedInstance.database!.executeUpdate(sqlStatement, withArgumentsInArray: [settingRecord.settingVersion, settingRecord.settingRelease, settingTimesUsedString])
出现这个错误,不明白为什么。
下面这行有效。注意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 永远不会自动推断出 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))
如果您想保留其他变量的类型安全性,而不是将整个数组转换为 'AnyObject',您可以将该特定变量转换为字符串来解决此问题。
例如
let settingTimesUsedString = String(settingRecord.settingTimesUsed)
let isInserted = sharedInstance.database!.executeUpdate(sqlStatement, withArgumentsInArray: [settingRecord.settingVersion, settingRecord.settingRelease, settingTimesUsedString])