Метод обновления не распознается после конвертации в 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
}