RxSwift学习笔记

RxSwift实现UITableView

1.常规创建UITableView的方法

2.使用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做了什么呢?

猜你喜欢

转载自blog.csdn.net/ZCC361571217/article/details/125013706