代码之家  ›  专栏  ›  技术社区  ›  john doe

Rxswift绑定到枚举

  •  0
  • john doe  · 技术社区  · 6 年前

    我有以下视图模型,我想将其绑定到uitextfield和uisegmentedcontrol。我能够成功绑定到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)
    

    }

    对于推荐的SegmentedControl绑定,我得到以下错误:

    Cannot invoke 'bind' with an argument list of type '(to: Int)'
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Daniel T.    6 年前

    你必须先创建一个 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)