RxSwift实现UITableView
1.常规创建UITableView的方法
我们知道iOS创建一个UITableView,下面的步骤是必不可少的
1.初始化UITableView,并且设置UITableView的数据源和代理
2.创建数据源
3.实现UITableView的数据源方法和代理方法 最简单的一个UITableView要有类似的代码:
import UIKit
class TVCDemoVC: IFLYBaseVC,UITableViewDataSource,UITableViewDelegate {
let titles = [
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine",
"ten",
]
override func viewDidLoad() {
super.viewDidLoad()
initTableView()
}
func initTableView(){
let tableView = UITableView.init(frame: .zero, style: .plain)
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "reuseIdentifier")
tableView.dataSource = self
tableView.delegate = self
self.view.addSubview(tableView)
tableView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return titles.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)
cell.textLabel?.text = titles[indexPath.row]
return cell
}
}
当然在实际的项目过程中,你可以对上述代码做优化,比如说在UIViewController的拓展方法里面实现UITableView的数据源和代理的相关方法。其中UITableView的numberOfRow方法和cellForRow方法是必须要实现的。
下面看看RxSwift如何实现这个功能相同的UITableView.
2.使用RxSwift创建UITableView
RxSwift对UITableView做了封装。实现上述的功能,我们只需要下面的代码即可。
import UIKit
import RxSwift
import RxCocoa
class RXTVCDemoVC: IFLYBaseVC {
let disposeBag = DisposeBag()
let titles = Observable.just([
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine",
"ten",
])
override func viewDidLoad() {
super.viewDidLoad()
initTableView()
}
func initTableView(){
let tableView = UITableView.init(frame: .zero, style: .plain)
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "reuseIdentifier")
self.view.addSubview(tableView)
tableView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
titles.bind(to: tableView.rx.items(cellIdentifier: "reuseIdentifier")) { row, person, cell in
cell.textLabel?.text = person
}.disposed(by: disposeBag)
}
}
从上面的代码看出,我们并没有实现UITableView的数据源方法和UITableView的代理方法。那么RxSwift内部对UItableView做了什么呢?