0
私はDifficultyViewDelegateの代理人を監視可能に移行しようとしています。カスタムDelegateProxyとプロトコルでイベントを受け取ることができません
@objc protocol DifficultyViewDelegate: class {
func levelDidIncrease()
func levelDidDecrease()
}
そして、私のDifficultyView:これは私のDifficultyViewDelegateある
weak var delegate: DifficultyViewDelegate?
@IBAction func decreaseLevel(_ sender: Any) {
delegate?.levelDidDecrease()
}
@IBAction func increaseLevel(_ sender: Any) {
delegate?.levelDidIncrease()
}
そして、これは私がまた私のDifficultyViewに拡張子を追加しました私の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
}
}
です:
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)
それは決して呼ばれません。誰かが何か指針を持っていますか?
IBOutletの関連がクリックされたとき 'decreaseLevelは(:)'関数が呼び出されます。 – XFreire
クール、ポインタのおかげで。しかし、なぜDifficultyViewTypeを作成し、単にPublishSubjectプロパティを使用するのではないのですか? –
他のサブビューでその動作を採用したくない場合は、 'DifficultyViewType'を作成する必要はありません。 – XFreire