从 RxTableViewSectionedReloadDataSource 调用自身不起作用

Calling self from RxTableViewSectionedReloadDataSource not working

我是 RxSwift 的新手,正在尝试了解 tableview 数据源的工作原理。

我有一个单元格,里面有两个按钮。这是我制作的数据源的代码。我无法访问自我。这两个按钮在点击时应显示新的视图控制器。

 let dataSource = RxTableViewSectionedReloadDataSource<SectionModel<String, CustomObject>>(
    configureCell: { (_, table, indexPath, element) in
        guard let cell: AppHelpTableViewCell = table.dequeueReusableCell(withIdentifier: AppHelpTableViewCell.reuseIdentifier,
                                                                         for: indexPath) as? AppHelpTableViewCell
        else { return UITableViewCell() }
        cell.configure(object: element)
        
        cell.introductionBtn.rx.tap.asDriver().drive(onNext: { [weak self] vc in
           self.openIntroductionHelp(object: element)
        }).disposed(by: cell.bag)
        
        cell.onlineBtn.rx.tap.asDriver().drive(onNext: { [weak self] vc in
            self.openIntroductionHelp(object: element)
        }).disposed(by: cell.bag)
        
        return cell
    }
)

当我从 UIViewController 调用函数时出现此错误 Value of type '((AppHelpDetailViewController) -> () -> AppHelpDetailViewController)?' has no member 'openIntroductionHelp' 我基本上是在尝试调用此表视图所在的视图控制器中实现的两个函数,但我无法通过此闭包执行此操作。

我考虑过使用 didSelectRow,但我在一个单元格中有两个按钮。

我看到的 rx 示例中没有任何按钮,或者没有显示 ho to access self configureCell。感谢您的任何提示。

您看到的问题不是来自您 post 编写的代码,或者您没有 post 足够的代码...编译得很好:

class Example {
    func example() {
        let dataSource = RxTableViewSectionedReloadDataSource<SectionModel<String, CustomObject>>(
            configureCell: { (_, table, indexPath, element) in
                guard let cell: AppHelpTableViewCell = table.dequeueReusableCell(withIdentifier: AppHelpTableViewCell.reuseIdentifier,
                                                                                 for: indexPath) as? AppHelpTableViewCell
                else { return UITableViewCell() }
                cell.configure(object: element)

                cell.introductionBtn.rx.tap.asDriver().drive(onNext: { [weak self] vc in
                    self?.openIntroductionHelp(object: element)
                }).disposed(by: cell.bag)

                cell.onlineBtn.rx.tap.asDriver().drive(onNext: { [weak self] vc in
                    self?.openIntroductionHelp(object: element)
                }).disposed(by: cell.bag)

                return cell
            }
        )
    }

    func openIntroductionHelp(object: CustomObject) { }
}

如果你想让它成为 class 的 属性,那么就让它变得懒惰:

class Example {
    lazy var dataSource = RxTableViewSectionedReloadDataSource<SectionModel<String, CustomObject>>(
        configureCell: { (_, table, indexPath, element) in
            guard let cell: AppHelpTableViewCell = table.dequeueReusableCell(withIdentifier: AppHelpTableViewCell.reuseIdentifier,
                                                                             for: indexPath) as? AppHelpTableViewCell
            else { return UITableViewCell() }
            cell.configure(object: element)

            cell.introductionBtn.rx.tap.asDriver().drive(onNext: { [weak self] vc in
                self?.openIntroductionHelp(object: element)
            }).disposed(by: cell.bag)

            cell.onlineBtn.rx.tap.asDriver().drive(onNext: { [weak self] vc in
                self?.openIntroductionHelp(object: element)
            }).disposed(by: cell.bag)

            return cell
        }
    )

    func openIntroductionHelp(object: CustomObject) { }
}