私はSQLite.swiftライブラリを使用しています。式<Int>を式<AnyObject>に変換できません
私は辞書がそれらをホストしたいと思います、だから、私は、いくつかのExpression
秒を持っている
let idColumn = Expression<Int>("id")
let nameColumn = Expression<String>("name")
:
let columns: [String: Expression<AnyObject>] = [
"id": idColumn,
"name": nameColumn
]
をしかし、私は、コンパイラのエラーを取得:
Cannot convert value of type 'Expression<Int>' to expected dictionary value type 'Expression<AnyObject>'
このエラーはなぜですか?なぜInt
タイプはAnyObject
にできないのですか?
私はまた、代わりにAnyObject
のいずれか試してみました:
let columns: [String: Expression<Any>] = [
"id" : idColumn,
"name": nameColumn
]
同様のエラーが表示さ:
Cannot convert value of type 'Expression<Int>' to expected dictionary value type 'Expression<Any>'
私はこのことを理解していない...誰かが私に説明してもらえますか?
「式」と「式」は異なるタイプであり、キャストは制限付きジェネリックタイプでは機能しません。 'idColumn'と' nameColumn'の両方を 'Expression 'と宣言してみませんか? –
私はSQLite.swift(またはSQLite)に関する経験はありませんが、これは['cast(_:)'](https://github.com/stephencelis/SQLite.swift/blob/master/Sources/ SQLite/Typed/Expression.swift#L141)関数はのためのものです。 Generics [一般的なケースでは不変である](https://stackoverflow.com/q/41976844/2976878)。 – Hamish
ジェネリックは一般にパラメータ化された型で共変しないためです。継承/多型は適用されません。 – matt