[英]Rxswift modelSelected
Data was imported and bound using api.使用 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.我想在选择表格视图时将其应用于表格视图并使用 Rxswift 将数据带到详细视图。 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 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)
itemSelected
property is a reactive wrapper for delegate
message tableView:didSelectRowAtIndexPath:
of type ControlEvent, so there is a really low chance, that something might go wrong. itemSelected
属性是 ControlEvent 类型的delegate
消息tableView:didSelectRowAtIndexPath:
的反应性包装器,因此出现 go 错误的可能性非常低。 However, modelSelected
is a method which tries to cast model to T.Type
under the hood.但是, modelSelected
是一种尝试将 model 转换为T.Type
的方法。 If we take a look at your screenshot, we will see, that this is exactly what is causing the error.如果我们查看您的屏幕截图,我们会看到,这正是导致错误的原因。
So just try to replace your modelSelected
subscription with this:因此,只需尝试将您的modelSelected
订阅替换为:
tableView.rx.modelSelected(CenterViewModel.self).observe(on: MainScheduler.instance).subscribe(onNext: { (item) in
//It's Error
print(item)
}).disposed(by: disposeBag)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.