无法通过自定义DelegateProxy和Protocol接收事件

我尝试将DifficultyViewDelegate的委托迁移到observable。 这是我的DifficultyViewDelegate:

@objc protocol DifficultyViewDelegate: class { func levelDidIncrease() func levelDidDecrease() } 

我的难点:

  weak var delegate: DifficultyViewDelegate? @IBAction func decreaseLevel(_ sender: Any) { delegate?.levelDidDecrease() } @IBAction func increaseLevel(_ sender: Any) { delegate?.levelDidIncrease() } 

这是我的RxDifficultyViewDelegateProxy

 class RxDifficultyViewDelegateProxy: DelegateProxy, DelegateProxyType { static func currentDelegateFor(_ object: AnyObject) -> AnyObject? { let difficultyView: DifficultyView = object as! DifficultyView return difficultyView.delegate } static func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) { let difficultyView: DifficultyView = object as! DifficultyView difficultyView.delegate = delegate as? DifficultyViewDelegate } } 

我还在我的DifficultyView上添加了一个扩展:

 extension DifficultyView { public var rx_delegate: RxDifficultyViewDelegateProxy { return RxDifficultyViewDelegateProxy.proxyForObject(RxDifficultyViewDelegateProxy.self) } public var rx_levelDidIncrease: Observable<Void> { return rx_delegate.methodInvoked(#selector(DifficultyViewDelegate.levelDidIncrease)).map { _ in return } } } 

但是,当我这样做的时候,

 difficultyView.rx_levelDidIncrease.asObservable().subscribe(onNext: { print("did increase") }).addDisposableTo(disposeBag) 

它从来没有被称为。 有人有任何指针?

尝试使用PublishSubject

DifficultyView:

 class DifficultyView: UIView { var levelDidIncrease = PublishSubject<Void>() var levelDidDecrease = PublishSubject<Void>() @IBAction func decreaseLevel(_ sender: Any) { levelDidDecrease.onNext() } @IBAction func increaseLevel(_ sender: Any) { levelDidIncrease.onNext() } } 

接着:

 var difficultyView = DifficultyView() difficultyView.levelDidDecrease.asObservable() .subscribe(onNext: { print("did decrease") }) .addDisposableTo(disposeBag) difficultyView.decreaseLevel(theSender) // <- THIS line performs the side effect