1

ライブラリを 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 です。

I get: Could not find member 'changes' if I remove changes i get: Could not find member 'update'

4

3 に答える 3

1

何が何かわかりませんが、 a 以外のものが返さbrochureれた場合、同じ結果が得られます。brochure.pdfIdString

チェーンされた式がある場合、迅速なエラーを推測するのは難しい場合があります。トラブルシューティングの 1 つの方法は、複数の手順に分割することです。

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どこにでも切り替えた理由はありますか?Int64 ビット精度を必要としない場所ならどこでも使用できるはずです。Boolブール値であるもののような型を使用することもできます:

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

拡張機能を使用すると、次のものも使用できますNSDate

let modificationDate = Expression<NSDate>("modificationDate")
于 2015-03-04T17:07:40.450 に答える
0

私はこれを試しました:

    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)」の引数リストで「update」を呼び出すことはできません

パンフレット.isLocal とパンフレット.needsUpdate の両方が Int64 です

コメントで述べたように、Int64 を使用せずに Int を使用すると、コンパイル エラーは発生しませんが、実行時にここでクラッシュします。

  for row in statement{
      var isLocal = row[6] as Int
  }
于 2015-03-05T10:47:05.580 に答える