RxSwift绑定到枚举

时间:2018-12-18 21:02:26

标签: rx-swift

我有以下要绑定到UITextField和UISegmentedControl的ViewModel。我能够成功绑定到UITextField,但是UISegmentedControl绑定不起作用,因为我推荐的数据类型是枚举。

enum Recommend: Int  {
    case yes = 0
    case no = 1
}

struct FeedbackViewModel {

    var name = Variable<String>("")
    var recommend = Variable<Recommend>(.yes) 

}

在我的视图控制器中,我具有以下绑定:

private func configureBindings(){

self.nameTextField.rx.text
        .orEmpty
        .bind(to: self.feedbackViewModel.name)
        .disposed(by: disposeBag)

self.recommendSegmentedControl.rx.value
    .bind(to: self.feedbackViewModel.recommend.value.rawValue)
    .disposed(by: disposeBag)

}

对于RecommendationSegmentedControl绑定,出现以下错误:

Cannot invoke 'bind' with an argument list of type '(to: Int)'

1 个答案:

答案 0 :(得分:1)

您必须首先创建一个Recommend值。

self.recommendSegmentedControl.rx.value
    .map(Recommend.init(rawValue:))
    .filter { $0 != nil }.map { $0! }
    .bind(to: self.feedbackViewModel.recommend)
    .disposed(by: disposeBag)

如果您想冒险的话,也可以这样做:

self.recommendSegmentedControl.rx.value
    .map { Recommend.init(rawValue: $0)! }
    .bind(to: self.feedbackViewModel.recommend)
    .disposed(by: disposeBag)