Я пытаюсь выполнить следующее в Swift - я хочу передать тип в общую функцию «get» и на основе этого типа и параметра использовать разные репозитории для возврата класс.Фабрика в Swift с использованием общих типов
Я признаю, что это немного странно, чтобы сделать это, но это сэкономит мне много времени и позволит мне более правильно реорганизовать что-то позже. Вот код, но он компилирует ошибки в строках Foo1Repository и Foo2Repository «Невозможно преобразовать тип Foo1Repository в T».
В основном Foo1Repository должен возвращать Foo1, который наследуется от BaseEntity конечно (и то же самое верно и для Foo2)
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)
и все вы настроены! Здесь нет необходимости в какой-то странной фабричной схеме.
Давайте просто скажем, что в настоящий момент мне нужно попытаться сделать это выше, без большого количества рефакторинга некоторого кода, который я унаследовал. Я вернусь к планированию надлежащего рефакторинга позже.
Так что я пробовал комбинацию вещей, но, похоже, не могу пройти мимо ошибок компилятора. Что-то вроде этого возможно, или мне нужно просто укусить пулю и пойти по другому пути? Спасибо!
Вопрос: Вы пытаетесь реализовать шаблон хранилища? Потому что это очень близко. –
Да, хотя в контексте Swift так немного сложнее/с использованием FMDB/SQLITE, поэтому ORM – NullHypothesis