【问题标题】:"_" is not convertible to Int32 - Swift“_”不能转换为 Int32 - Swift
【发布时间】:2015-07-24 16:05:45
【问题描述】:

收到此错误,但不明白为什么。

下面这行有效。请注意,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])

任何想法。

【问题讨论】:

    标签: swift compiler-errors int32


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      例如

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-14
        • 1970-01-01
        • 2015-08-20
        • 1970-01-01
        • 2014-09-27
        • 2014-10-09
        • 1970-01-01
        相关资源
        最近更新 更多