RxCocoa:无法使用类型为((to:(UITapGestureRecognizer)-> Void)'

时间:2019-10-31 12:14:52

标签: swift rx-swift

我使用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提示eventUITapGestureRecognizer

111

1 个答案:

答案 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)")
    })
}