RxCocoa: невозможно вызвать 'bind' со списком аргументов типа '(to: (UITapGestureRecognizer) -> Void)' - PullRequest
0 голосов
/ 31 октября 2019

Я использую 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 report:

Невозможно вызвать 'bind' со списком аргументов типа '(to: (UITapGestureRecognizer) -> Void)'

Я пытаюсь

 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

111

1 Ответ

1 голос
/ 31 октября 2019

Я думаю, 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)")
    })
}
...