Использую 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
................................