【问题标题】:RxSwift Binding to an EnumRxSwift 绑定到枚举
【发布时间】:2018-12-18 21:02:25
【问题描述】:

我有以下要绑定到 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) 

}

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

私有函数 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)

}

对于RecommendSegmentedControl 绑定,我收到以下错误:

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

【问题讨论】:

    标签: rx-swift


    【解决方案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)
    

    【讨论】:

    • 非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 2015-10-17
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多