Привязка RxSwift к Enum - PullRequest
       13

Привязка RxSwift к Enum

0 голосов
/ 19 декабря 2018

У меня есть следующая ViewModel, которую я хочу привязать к UITextField и UISegmentedControl.Мне удалось успешно выполнить привязку к UITextField, но привязка UISegmentedControl не работает, поскольку мой рекомендуемый тип данных - enum.

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)

}

Для рекомендуемого сегментированного управленияя получаю следующую ошибку:

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

1 Ответ

0 голосов
/ 19 декабря 2018

Вы должны сначала создать значение 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)
...