RxSwift - UITableView的简单使用

UITableView是我们经常用的一个控件,而且在开发过程中经常需要设置dataSource和delegate,然后实现相应的协议:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
}

在学习了RxSwift之后,我们可以写更优雅的代码实现上面的功能,下面来看一个简单demo,实现一个简单的tableView列表展示简单数据

class ViewController: UIViewController {
    
    let disposeBag = DisposeBag()
    
    lazy var tableView: UITableView = {
        let table = UITableView()
        table.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
        return table
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        addTableView()
        bindTableView()
    }
    
    func addTableView() {
        view.addSubview(tableView)
        tableView.snp.makeConstraints { (make) in
            make.left.top.bottom.right.equalToSuperview()
        }
    }
    
    func bindTableView() {
        // 1 初始化数据源
        let items = Observable.just((0...30).map {"\($0)" })
        // 2 绑定数据源到tableView
        items.bind(to: tableView.rx.items(cellIdentifier: "Cell", cellType: UITableViewCell.self)){ (row, element, cell) in
            cell.textLabel?.text = "\(element)"
            }
            .disposed(by: disposeBag)
        // 3 设置点击事件
        tableView.rx.modelSelected(String.self).subscribe(onNext: {
            print("tap index: \($0)")
        }).disposed(by: disposeBag)
    }
}

上面代码可知,我们仅仅只需要将数据源绑定到tableView上即可,这样可以实现相同的效果,而且代码看起来更简短。


效果如下:


RxSwift - UITableView的简单使用_第1张图片




你可能感兴趣的:(iOS,RxSwift)