RxSwift笔记 - RxCocoa 基础 (五) : UITableView + Refresh

TableView 通常要和 Refresh功能结合使用, Refresh 大都从网络获取数据然后进行刷新


本文模拟数据请求和表格刷新


数据获取, 返回列表数据
/// 获取数据
func getRandomResult() -> Observable<[SectionModel<String, Int>]> {
    let items = (0..<5).map { _ in Int(arc4random()) }
    let observable = Observable.just([SectionModel(model: "S", items: items)])
    return observable.delay(2, scheduler: MainScheduler.instance) // 模拟网络请求 延迟2秒钟
}
创建表格并绑定数据
/// 设置导航栏右侧按钮为刷新
let refreshButton = UIBarButtonItem()
refreshButton.title = "刷新"
self.navigationItem.rightBarButtonItem = refreshButton

// 创建表格
tableView = UITableView(frame: view.bounds, style: .plain)
// 注册单元格
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cellID")
view.addSubview(tableView)

// 初始化数据
let randomResult = refreshButton.rx.tap.asObservable()
    .throttle(1, scheduler: MainScheduler.instance) // 在主线程中操作, 若1秒钟多次改变, 取最后一次
    .startWith(()) // 加这个是为了一开始就能自动请求一次数据
    .flatMapLatest(getRandomResult) // 连续请求时只取最后一次数据
    .share(replay: 1)


// 创建数据源
let dataSource = RxTableViewSectionedReloadDataSource<SectionModel<String, Int>>( configureCell: {
    (dataSource, tableView, indexPath, element) -> UITableViewCell in
    let cell = tableView.dequeueReusableCell(withIdentifier: "cellID")!
    cell.textLabel?.text = "条目\(indexPath.row): \(element)"
    return cell
})

// 数据绑定
randomResult.bind(to: tableView.rx.items(dataSource: dataSource)).disposed(by: disposeBag)

停止数据请求

使用 takeUntil 来停止数据请求

let cancelButton = UIBarButtonItem()
cancelButton.title = "取消"
self.navigationItem.leftBarButtonItem = cancelButton

`
`
`
// 初始化数据
let randomResult = refreshButton.rx.tap.asObservable()
    .throttle(1, scheduler: MainScheduler.instance) // 在主线程中操作, 若1秒钟多次改变, 取最后一次
    .startWith(()) // 加这个是为了一开始就能自动请求一次数据
    .flatMapLatest({
    // 核心代码
    self.getRandomResult().takeUntil(self.cancelButton.rx.tap) }) // 停止数据请求
    .share(replay: 1)
    
`
`
`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值