Int64转换后无法识别更新方法

时间:2015-03-04 09:38:54

标签: sqlite.swift

由于您将库更新为Int64,我无法再编译代码。 我一直遇到像这样的更新方法的问题:

let id = Expression<String>("id")
let categoryId = Expression<Int64>("categoryId")
let languageId = Expression<String>("languageId")
let name = Expression<String>("name")
let thumb = Expression<Blob?>("thumb")
let modificationDate = Expression<String>("modificationDate")
let isCurrent = Expression<Int64>("isCurrent")
let isLocal = Expression<Int64>("isLocal")
let needsUpdate = Expression<Int64>("needsUpdate")
let progress = Expression<Double>("progress")

let brochureToUpdate = table.filter(id == brochure.pdfId).update(isLocal <- Int64(brochure.isLocal), needsUpdate <- Int64(brochure.needsUpdate)).changes

我已将所有Expression从Expression转换为Expression,并且所有与Expression绑定的Int都是Int64。

我得到:找不到会员变更&#39; 如果我删除了更改:我找不到会员&#39;更新&#39;

3 个答案:

答案 0 :(得分:1)

我无法看到brochure是什么,但如果brochure.pdfId返回String以外的任何内容,我会得到相同的结果。

当你有一个链式表达式时,很难推断出Swift错误。解决问题的一种方法是将其分解为多个步骤:

let filter = table.filter(id == brochure.pdfId) // fails
filter.update(
    isLocal <- Int64(brochure.isLocal),
    needsUpdate <- Int64(brochure.needsUpdate)
).changes

这样,你会得到一个更有帮助的错误。例如,如果brochure.pdfId返回IntBinary operator '==' cannot be applied to operands of type 'Expression<String>' and 'Int'

更改为以下内容应该允许编译:

table.filter(id == String(brochure.pdfId))

其他想法......

你有没有理由在任何地方切换到Int64?您仍然可以在任何不需要64位精度的地方使用Int。您甚至可以将类似Bool的类型用于布尔值:

let isCurrent = Expression<Bool>("isCurrent")
let isLocal = Expression<Bool>("isLocal")

使用an extension,您甚至可以使用NSDate

let modificationDate = Expression<NSDate>("modificationDate")

答案 1 :(得分:1)

谢谢Stephen,

使用

while statement.step() {
    .....
}

做了这个伎俩。 我可以使用Bool并且不会抱怨Int。

我确实在文档中看到了statement.step(),是一个没有文档的功能吗?

答案 2 :(得分:0)

我试过了:

    let brochureToUpdate = table.filter(id == "dfdf")
    brochureToUpdate.update(
        isLocal <- Int64(brochure.isLocal),
        needsUpdate <- Int64(brochure.needsUpdate)
    ).changes

我得到了声明&#39;没有名为&#39; changes&#39;

的成员

如果我试试这个:

    let brochureToUpdate = table.filter(id == "dfdf")
    brochureToUpdate.update(
        isLocal <- Int64(brochure.isLocal),
        needsUpdate <- Int64(brochure.needsUpdate)
    )

无法调用&#39;更新&#39;使用类型&#39;($ T9,$ T17)&#39;

的参数列表

brochure.Lelbocal和uni.needsUpdate都是Int64

正如我在评论中所说的那样,如果我不使用Int64但是Int我没有得到任何编译错误,但在运行时它崩溃了:

  for row in statement{
      var isLocal = row[6] as Int
  }