RxSwift <11>—— 爬坑

2019-10-22  本文已影响0人  Gollum_

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

// 内部序列响应,不被外界影响
fileprivate var mySubject = PublishSubject<Any>()
var publicOB : Observable<Any>{
    return mySubject.asObservable()
}

A VC中:

let vc = LGDetialViewController()
    vc.publicOB
    .subscribe(onNext: { (item) in
        print("订阅到 \(item)")
    })
        .disposed(by: vc.disposeBag)
    self.navigationController?.pushViewController(vc, animated: true)

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
}
点击了 [0, 0]
********************
点击了 [0, 1]
********************
点击了 [0, 2]
********************
点击了 [0, 1]
点击了 [0, 21]
********************
点击了 [0, 3]
点击了 [0, 23]
********************
点击了 [0, 29]
点击了 [0, 49]
点击了 [0, 69]
********************

** 解决思路

// 外界订阅处理
cell.button.rx.tap
    .subscribe(onNext: { () in
        print("点击了 \(indexPath)")
    })
    .disposed(by: cell.disposeBag)

// cell内部处理
override func prepareForReuse() {
    super.prepareForReuse()
    // 销毁垃圾袋重置
    disposeBag = DisposeBag()
}
上一篇 下一篇

猜你喜欢

热点阅读