【问题标题】:Instance method 'items' requires that 'listen' conform to 'Sequence'实例方法“items”要求“listen”符合“sequence”
【发布时间】:2021-01-02 22:06:33
【问题描述】:

我想绑定tableViewCell的值。但是有一个像标题这样的错误。我以前从未见过这个错误,我想知道如何解决它。

  func bindViewModel() {
        let input = ListenViewModel.input(loadData: loadData.asSignal(onErrorJustReturn: ()))
        let output = viewModel.transform(input)
        
        output.loadApplyList.bind(to: tableView.rx.items) { tableView, index, element -> UITableViewCell in
            guard let cell = self.tableView.dequeueReusableCell(withIdentifier: "ListeningTableViewCell") as? ListeningTableViewCell else {
                return ListeningTableViewCell()}
            cell.listeningData = element
        }.disposed(by: disposeBag)
        
    }

这是我的 ViewController 代码

class ListenViewModel: ViewModelType {

    private let disposeBag = DisposeBag()
    static var loadData = PublishRelay<listen>()

    struct input {
        let loadData: Signal<Void>

    }
    struct output {
      //  let isEnabled: Driver<Bool>
        let result: Signal<String>
        let loadApplyList: PublishRelay<listen>
    

    }

    func transform(_ input: input) -> output {
        let api = ProfileAPI()
        let result = PublishSubject<String>()
        let loadApplyList = PublishRelay<listen>()
    

        input.loadData.asObservable().subscribe(onNext: { [weak self] in
            guard let self = self else { return }
            api.getListenigList("admin123@gmail.com").subscribe(onNext: { (response, statuscode) in
                switch statuscode {
                case .ok:
                    if let response = response {
                        loadApplyList.accept(response)
                    }
                case .noHere: result.onNext("fail")
                default:
                    print("Default")
                }
            }).disposed(by: self.disposeBag)
        }).disposed(by: disposeBag)

        return output(result: result.asSignal(onErrorJustReturn: "실패"), loadApplyList: loadApplyList)
    }

}

这是我的 ViewModel 代码。 如何解决此错误?

【问题讨论】:

  • 您只想显示一个ListeningTableViewCell 单元格吗?
  • 在这个屏幕上,我只想显示 ListeningTabelViewCell。

标签: swift uitableview bind rx-swift


【解决方案1】:

要绑定到表视图的items,您需要一系列事物,例如数组。该序列的每个元素都将显示在一个单元格上。

你在这里有一个listen 对象 (output.loadApplyList),这不是一个序列。如果您只想显示一个单元格,您应该创建一个包含单个元素的序列。

有一种简单的方法可以创建一个只有一个元素的序列:CollectionOfOne,所以你应该 map 你的 listen 对象。

output.loadApplyList.map(CollectionOfOne.init).bind(to: tableView.rx.items) { ... }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 2018-06-27
    • 1970-01-01
    • 2017-01-22
    相关资源
    最近更新 更多