私はSwiftで以下のことを達成しようとしています。タイプを汎用のget関数に渡し、そのタイプとパラメータに基づいて別のリポジトリを使用して戻しますクラス。Swiftの一般的なタイプを使用している工場
これは少し奇妙なことですが、それは私に多くの時間を節約し、後でもっと適切にリファクタリングすることができます。 ここにコードがありますが、Foo1RepositoryとFoo2Repositoryの行でエラーがコンパイルされます。「Foo1RepositoryのタイプをTに変換できません。
基本的にFoo1RepositoryもちろんのBaseEntityから継承(と同じことがfoo2はのために真である)FOO1を返す必要があります
class func Get<T: BaseEntity>(id: Int) -> T
{
if (T is Foo1) {
return Foo1Repository.Get(id)
}
else if (T == Foo2) {
return Foo2Repository.Get(id)
}
return T()
}
私が行うことで、この機能を呼び出すために期待していた。
let foo = FactoryClass.Get<Foo1>(1)
私はすぐにあなたが「適切なリポジトリを呼び出すだけではなく、
let foo = Foo1Repository.Get(1)
あなたはすべて設定されています。ここには奇妙な工場パターンは必要ありません。
私が継承したコードのリファクタリングをあまり行わずに、これを実行する必要があるとしましょう。私は後で適切なリファクタを計画することに戻るでしょう。
私は物事の組み合わせを試しましたが、それでもコンパイラエラーを乗り越えることはできません。このようなことが可能か、それとも弾丸を噛んで別のルートに進む必要がありますか?本当にありがとう!
1つの質問、リポジトリパターンを実装しようとしていますか?それはそれに非常に近いからです。 –
ええ、スウィフトの文脈では少し難しい/ FMDB/SQLiteを使用しているのでORMはありません – NullHypothesis