我使用RxCocoa,我有这样的代码
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)
}
我想做一些封装,将上面的内容变成这样:
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报告:
无法使用类型为'(to:(UITapGestureRecognizer)-> Void)'的参数列表调用'bind'
我尝试
func debug( _ event: @escaping (UITapGestureRecognizer) -> Void){
Xcode报告:
Cannot invoke 'bind' with an argument list of type '(to: @escaping (UITapGestureRecognizer) -> Void)'
重要的是什么? RX名称空间?
当我在前面键入event
时,Xcode提示event
是UITapGestureRecognizer
答案 0 :(得分:1)
我认为bind(onNext: @escaping (E) -> Void)
是您要找的,而不是bind<O: ObserverType>(to observer: O)
。
比较实现方式
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)")
})
}