Невозможно преобразовать значение типа 'Observable <String>' в ожидаемый тип аргумента 'BehaviorRelay <String>' - PullRequest
0 голосов
/ 25 октября 2018

Невозможно преобразовать значение типа 'Observable' в ожидаемый тип аргумента 'BehaviorRelay'

Я использую RxSwift.У меня

В ВМ.

        let St: BehaviorRelay<String>

В ВК как вход

        St: self.searchbar.rx.text.orEmpty.asObservable()

Как я могу преобразовать его?Итак, я могу получить

BehaviorRelay с панели поиска.Убедитесь, что его ВХОД.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Для этого вы можете использовать метод bind(to: _) RxCocoa.

class ViewModel {
    let inputText = BehaviorRelay(value: "")
}

class YourViewController: UIViewController { 
    private let viewModel = ViewModel()

    func viewDidLoad() {
        searchBar.rx.text
            .orEmpty()
            .bind(to: viewModel.inputText)
            .disposed(by: disposeBag)
    }
}
0 голосов
/ 25 октября 2018

Вы можете создавать структуры ввода и вывода в ViewModel и передавать searchText как наблюдаемый в ViewModel через Input

    class ViewModel {

       private let searchText = BehaviorRelay<String>(value: "")

       struct Input {
         let text: Observable<String>
       }

       struct Output {
         let result: Driver<[String]>
       }

       func transform(input: Input) -> Output {
          input.text.bind(to: searchText)
          let result = Driver<[String]>.just([])
          return Output(result: result)
       }
   }

в ViewController

class SearchViewController {

    let viewModel = ViewModel()

    override func viewDidLoad() {
      super.viewDidLoad()
      bindViewModel()
    }

    func bindViewModel() {
      let input = ViewModel.Input(text: self.searchBar.rx.text.orEmpty.asObservable())
      let output = viewModel.transform(input: input)
      //use output to show results
    }
}
...