无法将类型“ Observable <string>”的值转换为预期的参数类型“ BehaviorRelay <string>”

时间:2018-10-25 07:06:43

标签: swift rx-swift

无法将“可观察”类型的值转换为预期的参数类型“ BehaviorRelay”

我正在使用RxSwift。 我有

在VM中。

        let St: BehaviorRelay<String>

在VC中作为输入

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

如何转换? 所以,我可以得到

来自搜索栏的行为继电器。确保其输入。

2 个答案:

答案 0 :(得分:0)

您可以在ViewModel中创建Input和Output结构,并将searchText作为Observable通过Input传递给ViewModel

    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
    }
}

答案 1 :(得分:0)

您可以为此使用RxCocoa的bind(to: _)方法。

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)
    }
}