使用选择器时如何处理回调?

我将逻辑代码放在viewModel中。 view调用viewController中的一个方法。然后,该方法通过使用viewModel来调用#selectors中的其余方法。这可以正常工作,直到需要tableView重新加载tableView.reloadData()。该部分显然需要放在view中。

通常,这可以通过使用多个闭包来实现。但是由于#selectors不能有参数,因此在调用的最后一个方法中不能有completion()回调。所以,我的问题是,如何解决这个问题?是否有使用#selectors的替代方法?在view订阅viewModel的最后一种方法时,我应该有一位观察员吗? RxSwift可以替代吗?还是有使用#selectors的解决方法?

fangyuanhang 回答:使用选择器时如何处理回调?

RxSwift是一个很好的选择,但是如果您需要的内容不那么繁重,则需要使用委托模式:

protocol ViewDelegate {
    // Other functions you might need
    func reloadTableView()
}

Then in your viewController,you implement these:

class ViewController: ViewDelegate {
    func reloadTableView() {
        tableView.reloadData()
    }
}

在某个地方,您需要在视图模型中定义委托:

weak var viewDelegate: ViewDelegate

在创建类时还要分配它:

let model = ViewModel()
let view = ViewController()

model.viewDelegate = view

Swift官方文档提供了有关协议的更多信息:https://docs.swift.org/swift-book/LanguageGuide/Protocols.html

本文链接:https://www.f2er.com/3146642.html

大家都在问