Что заменит переопределение в Rx? - PullRequest
0 голосов
/ 25 июня 2019

Я новичок в 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 в B viewDidLoad метод. Но что, если у меня есть количество кодов (например, 20 строк, включая сопоставление, фильтрацию, настройку) о поведении кнопки, но я просто хочу изменить только одну строку (например, просто переопределить заголовок кнопки при касании)?

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 25 июня 2019

Слабое «само» не требуется, потому что нет никаких задержек или асинхронного метода, запускаемого при действии касания. Таким образом, вы можете просто передать метод, и он вызовет метод, переопределенный в классе 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) {}
}
...