Как на самом деле была реализована обработка нажатия кнопки RX? - PullRequest
0 голосов
/ 13 декабря 2018

Кто-нибудь знает, как на самом деле была реализована обработка нажатия кнопки RX?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018
extension Reactive where Base: UIButton {
    /// Reactive wrapper for `TouchUpInside` control event.
    public var tap: ControlEvent<Void> {
        return controlEvent(.touchUpInside)
    }
}
0 голосов
/ 13 декабря 2018

Если мы подробно изучим код RxCocoa.Чтобы быть более конкретным в структуре «Reactive», мы могли бы найти, что у нее есть расширение, где ее основанием является UIButton, и в этом расширении есть переменная tap типа ControlEvent, которая возвращает controlEvent (.touchUpInside).

Итак, вопрос в том, как controlEvent (.touchUpInside) обрабатывает события управления?!

  • controlEvent (_ controlEvents: UIControlEvents) -> ControlEvent <()> .. являетсяФункция внутри расширения для "Реактивной" структуры, где ее основой является UIControl.И когда нашей базой является UIButton, который также расширяет UIControl, поэтому мы можем также вызывать эту функцию, когда нашей базой является UIButton, и это наш случай, и эта функция обрабатывает отводы UIButton (которые указаны только в RxCocoa как в расширении).

Как функция controlEvent работает и обрабатывает touchupInside?!

  • controllEvent, просто добавляя селектор цели в UIControll, выбрасывает пользовательский класс ControlTarget в RxCocoa, который пропускает обратный вызов в UIControllиспустить onNext в определенном управляющем событии (в нашем случае touchupInside).

читать эти классы в RxCoca, если мое объяснение недостаточно хорошо:)

  1. UIButton + Rx.swift
  2. ControlEvent.swift
  3. UIControl + Rx.swift
  4. ControlTarget.swift
...