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

问题描述 投票:0回答:1

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

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

swift event-handling selector viewmodel
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.