简体   繁体   English

Rxswift modelSelected

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM