I use RxCocoa, I have code like this,
func debug(){
isUserInteractionEnabled = true
let tap = UITapGestureRecognizer()
tap.numberOfTapsRequired = 2
addGestureRecognizer(tap)
tap.rx.event.bind { (event) in
if self.phone.text == Phone.one{
self.phone.text = Phone.two
}
else{
self.phone.text = Phone.one
}
self.verification.text = ""
}.disposed(by: rx.disposeBag)
}
I want to do some encapsulation, turn the above to this:
func debug( _ event: (UITapGestureRecognizer) -> Void){
isUserInteractionEnabled = true
let tap = UITapGestureRecognizer()
tap.numberOfTapsRequired = 2
addGestureRecognizer(tap)
tap.rx.event.bind(to: event).disposed(by: rx.disposeBag)
}
Xcode reports:
Cannot invoke 'bind' with an argument list of type '(to: (UITapGestureRecognizer) -> Void)'
I try
func debug( _ event: @escaping (UITapGestureRecognizer) -> Void){
Xcode reports:
Cannot invoke 'bind' with an argument list of type '(to: @escaping (UITapGestureRecognizer) -> Void)'
What matters? Rx name space?
When I type event
in the former, Xcode tips event
is UITapGestureRecognizer
I think bind(onNext: @escaping (E) -> Void)
is what you look for, rather than bind<O: ObserverType>(to observer: O)
.
Compare implementations:
public func bind<O: ObserverType>(to observer: O) -> Disposable where O.E == E {
return self.subscribe(observer)
}
public func bind(onNext: @escaping (E) -> Void) -> Disposable {
return subscribe(onNext: onNext, onError: { error in
rxFatalErrorInDebug("Binding error: \(error)")
})
}