Data was imported and bound using api. And I want to apply it to the table view and take data to the detailed view using Rxswift when selecting the table view. But there's an error. What's wrong? enter image description here
Fetch Service
func fetchCovidCenter() -> Observable<[Center]> {
return Observable.create { observer -> Disposable in
let task = URLSession.shared.dataTask(with: URL(string: CENTER_LIST_URL)!) { data, _, _ in
guard let data = data else {
observer.onError(NSError(domain: "", code: -1, userInfo: nil))
return
}
do {
let covid = try JSONDecoder().decode(Covid.self, from: data)
let centers = covid.data
observer.onNext(centers)
}catch {
observer.onError(error)
}
}
task.resume()
return Disposables.create {
task.cancel()
}
}
}
Model
struct Covid : Decodable {
let page : Int
let perPage : Int
let totalCount : Int
let currentCount : Int
let data : [Center]
}
struct Center : Decodable {
let id : Int
let centerName : String
let sido : String
let sigungu : String
let zipCode : String
let facilityName : String
let phoneNumber : String
let createdAt : String
let lat : String
let lng : String
let updatedAt : String
let address : String
let org : String
let centerType : String
}
TableView
tableView.register(CenterTableViewCell.self, forCellReuseIdentifier: CenterTableViewCell.identifier)
tableView.rx.setDelegate(self).disposed(by: disposeBag)
guard let viewModel = viewModel else { return }
viewModel.fetchCenterViewModels().observe(on: MainScheduler.instance).bind(to: tableView.rx.items(cellIdentifier: CenterTableViewCell.identifier,cellType: CenterTableViewCell.self)) { (index,viewModel,cell) in
//It's working.
cell.viewModel = viewModel
}.disposed(by: disposeBag)
tableView.rx.modelSelected(Center.self).observe(on: MainScheduler.instance).subscribe(onNext: { (item) in
//It's Error
print(item)
}).disposed(by: disposeBag)
tableView.rx.itemSelected.subscribe(onNext: { item in
//It's working.
print(item)
}).disposed(by: disposeBag)