Переиспользование Контроллера с использованием перечисления Realm молелей


#1

Использую SegmentedControl из 4 сегментов и перечисление, где в итоге решается какая модель отправляется в контроллер, ну дальше во ViewModel для запроса json из сети.
3 из 4-х сегментов похожи и их можно использовать в одном коттроллере.
Вполне возможно, что не правильно передаю тип модели. Ругается компилятор в контроллере.
" Instance method ‘fetch(type:completion:)’ requires that ‘Object’ conform to ‘Decodable’ "

Сегментный контроль:

let controller = container.currentViewController as? ScrapTableViewController
let type = TypList.typeOfObject(type: TypList(rawValue: Int(index))!)
controller?.type = type

Сам енум:

import RealmSwift
import Realm

enum TypList: Int {
    case all
    case artist
    case genre
    case book

static func typeOfObject(type: TypList) -> Object.Type {
    switch type {
    case .all:
        return AlbumModel.self
    case .artist:
        return ArtistModel.self
    case .genre:
        return GenreModel.self
    case .book:
        return BookModel.self
    }
  }
}

Контроллер:

class ScrapTableViewController: UITableViewController {
    private var viewModel: ScrapViewModel = {
        return ScrapViewModel()
    }()

    var type: Object.Type! {
        didSet {
            viewModel.fetch(type: sermonType) { // error: Instance method 'fetch(type:completion:)' requires that 'Object' conform to 'Decodable'
                self.tableView.reloadData()
            }
        }
    }

ViewModel:

class ScrapViewModel {
    func fetch<T: Object>(type model: T.Type, completion: @escaping () -> Void) where T: Decodable {
        do {
                let decoder = JSONDecoder()
                let object = try decoder.decode(model, from: response.data as Data)
                self?.object = object.map {$0}
                
                completion()
            } catch let jsonErr {
                print("Error serializing json: ", jsonErr)
            }
    }
}

Model:

class BookModel: Object, Decodable {
    @objc dynamic var id = 0
    @objc dynamic var short = ""
    @objc dynamic var long = ""
    @objc dynamic var numTitles = 0
................................