美文网首页
RxSwift <11>—— 爬坑

RxSwift <11>—— 爬坑

作者: Gollum_ | 来源:发表于2019-10-22 10:33 被阅读0次

使用过程中爬坑记录一下
RxSwift 计数问题
两个页面,A,B.需要实现B页面给A页面传值,可以通过序列实现:
B 的VC:

// 内部序列响应,不被外界影响
fileprivate var mySubject = PublishSubject<Any>()
var publicOB : Observable<Any>{
    return mySubject.asObservable()
}
  • 对外暴露publicOB,以便订阅信息
  • mySubject序列响应,内部事件发送
  • 内外区分,达到干净的效果

A VC中:

let vc = LGDetialViewController()
    vc.publicOB
    .subscribe(onNext: { (item) in
        print("订阅到 \(item)")
    })
        .disposed(by: vc.disposeBag)
    self.navigationController?.pushViewController(vc, animated: true)
  • 这里注意需要使用vc.disposeBag

cell复用导致序列重复订阅响应

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) as! LGTableViewCell
    
    cell.button.rx.tap
        .subscribe(onNext: { () in
            print("点击了 \(indexPath)")
        })
        .disposed(by: bag)
    return cell
}
  • 这一段代码乍一看也是没有什么问题的,包括你不滑动屏幕也不会产生问题
  • 只要你一划动屏幕,因为我们的cell的重用机制,会导致cell.button.rx.tap的订阅也会重复订阅响应,显然不是我们正常
    开发中想见到的样子
点击了 [0, 0]
********************
点击了 [0, 1]
********************
点击了 [0, 2]
********************
点击了 [0, 1]
点击了 [0, 21]
********************
点击了 [0, 3]
点击了 [0, 23]
********************
点击了 [0, 29]
点击了 [0, 49]
点击了 [0, 69]
********************

** 解决思路

  • 思路一: 把主动销毁的能力收回,销毁垃圾袋交给我们的cell.disposeBag,在我们重用响应的时候,及时销毁,重置!
// 外界订阅处理
cell.button.rx.tap
    .subscribe(onNext: { () in
        print("点击了 \(indexPath)")
    })
    .disposed(by: cell.disposeBag)

// cell内部处理
override func prepareForReuse() {
    super.prepareForReuse()
    // 销毁垃圾袋重置
    disposeBag = DisposeBag()
}
  • 销毁垃圾袋交给cell自身

  • 在prepareForReuse 响应的时候,销毁垃圾袋重置

  • 效果很明显,问题得到了解决!

相关文章

  • RxSwift <11>—— 爬坑

    使用过程中爬坑记录一下RxSwift 计数问题两个页面,A,B.需要实现B页面给A页面传值,可以通过序列实现:B ...

  • RxSwift MVVM 关于ViewModel的两种不同实现

    GitHub Demo链接 前言:最近换了新公司,开始了RxSwift+MVVM的爬坑之旅,相比之前臃肿的MVC,...

  • RXSwift学习资料

    使用自带教程入门 RxSwift 入坑手册 Part0 - 基础概念 RxSwift 入坑手册 Part1 - 示...

  • RXSwift的使用用法

    发现 关注 消息 RxSwift入坑解读-你所需要知道的各种概念 沸沸腾关注 2016.11.27 19:11*字...

  • RxSwift 网络请求

    一、说明 入坑RxSwift 有段时间了,之前在项目中只是小范围的使用RxSwift,为了更好的使用响应式编程,决...

  • Learn RxSwift The Hard Way - Int

    从这篇博文开始,我准备开一个新的坑,来记录一下学习 RxSwift 的过程。 Why? RxSwift 和 Rea...

  • RxSwift项目实践

    RxSwift-MVVM 这个项目是入坑RxSwift以来的一些收获,历经多个真实项目的实践。我也一直在为写出简洁...

  • RxSwift 踩坑

    最近在写一个纯Swift的个人项目,使用了RxSwift这个函数式编程库,踩了一些坑,写下备用。 1. Varia...

  • RxSwift(伪)实战-组内分享

    前提入了 RxSwift 的坑之后的一次组内分享记录,水平菜,纯入门

  • 爬坑

    文文很郁闷,最近他遇到一件不公平的事,在他看来,这是非常非常明显的不公平。 前段时间,公司要提拔一位主管,...

网友评论

      本文标题:RxSwift <11>—— 爬坑

      本文链接:https://www.haomeiwen.com/subject/iyofvctx.html