Метод обновления не распознается после конвертации в Int64

Поскольку вы обновили библиотеку до 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, и все Int, которые связаны с Expression, являются Int64.

Я получаю: Не могу найти "изменения" участника, если я удаляю изменения, которые я получаю: Не удалось найти участника "обновление"

3 ответа

Спасибо Стивен,

с помощью

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

сделал трюк. Я могу использовать Bool и не жалуюсь на Int.

Я видел, хотя Statement.step() в документации, это недокументированные функции?

Я не вижу что brochure но я получаю тот же результат, если brochure.pdfId возвращает что-либо кроме String,

Быстрые ошибки могут быть трудно вывести, когда у вас есть цепочечное выражение. Один из способов устранения неполадок состоит в том, чтобы разбить его на несколько этапов:

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

Таким образом, вы получите гораздо более полезную ошибку. Если, например, brochure.pdfId возвращает Int: Binary operator '==' cannot be applied to operands of type 'Expression<String>' and 'Int',

Надеемся, что переход к следующему разрешит компиляцию:

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

Другие мысли...

Есть ли причина, по которой вы перешли на Int64 везде? Вы все еще должны быть в состоянии использовать Int везде, где вам не нужна 64-битная точность. Вы даже можете использовать такие типы, как Bool для вещей, которые имеют логические значения:

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

С расширением вы можете даже использовать NSDate:

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

Я попробовал это:

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

Я получаю "Заявление" не имеет члена с именем "изменения"

Если я попробую это:

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

Невозможно вызвать "обновление" со списком аргументов типа "($T9, $T17)"

И Брошюра.isLocal и Брошюра.needsUpdate являются Int64

Как я сказал в комментарии, если я не использую Int64, но Int, я не получаю никакой ошибки компиляции, но во время выполнения она вылетает здесь:

  for row in statement{
      var isLocal = row[6] as Int
  }
Другие вопросы по тегам