举一个简单的列表来感受一下RXSwift
之MVVM
使用的简洁性。
VC
的代码量。
tableView 赋值绑定
import UIKit
class MMVVMViewController: MBaseViewController {
let viewModel = MRXViewModel()
var disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(tableView)
tableView.snp.makeConstraints { (make) in
make.edges.equalToSuperview()
}
//一般赋值绑定
let dataOB = BehaviorSubject.init(value: self.viewModel.dataArray)
dataOB.asObserver().bind(to: self.tableView.rx.items(cellIdentifier: MMVVMTableViewCell.cellReuseIdentifier(), cellType: MMVVMTableViewCell.self)){
(row,model,cell) in
cell.setUIData(model as! MRXModel)
}.disposed(by: self.disposeBag)
}
lazy var tableView: UITableView = {
let tableView = UITableView.init(frame: view.bounds, style: .plain)
tableView.estimatedRowHeight = 60
tableView.register(MMVVMTableViewCell.self, forCellReuseIdentifier: MMVVMTableViewCell.cellReuseIdentifier())
return tableView
}()
}
tableView点击事件
tableView.rx.itemSelected.subscribe(onNext: { [weak self](indexPath) in
print("\(String(describing: self))点击\(indexPath)行")
}).disposed(by: self.disposeBag)
tableView复选点击事件
tableView.rx.itemDeselected.subscribe(onNext: { (indexPath) in
print("再次点击\(indexPath)行")
}).disposed(by: self.disposeBag)
tableView移动事件
tableView.isEditing = true
tableView.rx.itemMoved.subscribe(onNext: { [weak self] (sourceIndex,destinationIndex) in
print("从\(sourceIndex)移动到\(destinationIndex)")
self?.viewModel.dataArray.swapAt(sourceIndex.row, destinationIndex.row)
self?.loadUI(obSubject: dataOB)
}).disposed(by: self.disposeBag)
func loadUI(obSubject:BehaviorSubject<[Any]>) {
obSubject.onNext(self.viewModel.dataArray)
}
tableView删除事件
tableView.delegate = self
extension MMVVMViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
return UITableViewCell.EditingStyle.delete
}
}
tableView.rx.itemDeleted.subscribe(onNext: { [weak self](indexPath) in
print("点击删除\(indexPath)行")
self?.viewModel.dataArray.remove(at: indexPath.row)
self?.loadUI(obSubject: dataOB)
}).disposed(by: self.disposeBag)
tableView新增事件
tableView.delegate = self
extension MMVVMViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
return UITableViewCell.EditingStyle.insert
}
}
tableView.rx.itemInserted.subscribe(onNext: { [weak self](indexPath) in
print("添加数据在\(indexPath)行")
guard let model = self?.viewModel.dataArray.last else{
print("数据有问题,无法新增")
return
}
self?.viewModel.dataArray.insert(model, at: indexPath.row)
self?.loadUI(obSubject: dataOB)
}).disposed(by: self.disposeBag)