Rx中替代的替代品是什么?

时间:2019-06-25 12:04:28

标签: swift rx-swift

我是rx的新手,并对一个问题感到好奇:rx中的替代替换是什么?

对于我读过的有关rx的代码,按钮的配置如下:

override func viewDidLoad() {
    super.viewDidLoad()

    updateConversation()

    self.naviAvatar.rx.tap
        .debug("naviAvatar tap")
        .subscribe(onNext: { _ in
            print("didTapNaviAvatar")
        })
        .disposed(by: disposeBag)
}

而且效果很好。

但是我遇到一个问题,在子类中我想使按钮静音,而我不知道如何在rx中实现。

在我之前的代码中,我有以下代码:

class A: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(didTapNaviAvatar(_:)))
        self.naviAvatar.addGestureRecognizer(tapRecognizer)
    }

    @objc func didTapNaviAvatar(_ sender: Any) {
            print("didTapNaviAvatar")
        }
    //...
}

class B: A {
    // Silent the method, do nothing.
    override func didTapNaviAvatar(_ sender: Any) {}
    //...
}

我想到了可以用naviAvatar的{​​{1}}方法重新配置B的想法。但是,如果我有许多关于按钮行为的代码(例如20行,包括映射,过滤,配置),但是我只想更改一行(例如在触摸时覆盖按钮标题),该怎么办?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

不需要弱自我,因为轻击操作不会触发延迟或异步方法。因此,您只需传递该方法,它将触发在B类中覆盖的方法。

 class A: UIViewController {
     override func viewDidLoad() {
         super.viewDidLoad()
         naviAvatar.rx.tap
              .debug("naviAvatar tap")
              .subscribe(onNext: didTapNaviMoreButton)
              .disposed(by: disposeBag)
    }

    @objc func didTapNaviAvatar(_ sender: Any) {
        print("didTapNaviAvatar")
    }
}

class A: B {
    override func didTapNaviAvatar(_ sender: Any) {}
}
相关问题