How to get change the value of the UISlider

Viewed 5601

How to get the values while moving the UISlider?

I'm using the following code:

ViewModel:

import Foundation
import RxSwift

final class ViewModel {

    private let disposeBag = DisposeBag()

    var value: Variable<Float>

    init() {

        self.value = Variable(Float(0.0))

    }
}

ViewController:

@IBOutlet var slider: UISlider!

private var viewModel: ViewModel!
private let disposeBag = DisposeBag()

override func viewDidLoad() {
    viewModel = ViewModel()

    slider.rx.value
        .subscribe(onNext: { (value) in
            self.viewModel.value = Variable(Float(value))
        })
        .addDisposableTo(disposeBag) 
}

But this code does not work. What's my mistake?

3 Answers

If you use new BehaviorRelay instead of old Variable:

struct MyViewModel {
    let value = BehaviorRelay<Float>(value: 0)
}

class ViewController: UIViewController {
    @IBOutlet var slider: UISlider!
    @IBOutlet var valueLabel: UILabel!
    private var viewModel = MyViewModel()

    override func viewDidLoad() {
        super.viewDidLoad()

        slider.rx.value
            .bind(to: viewModel.value)
            .disposed(by: rx.disposeBag)

        // If you want to listen and bind to a label
        viewModel.value.asDriver()
            .map { "Value: \($0 * 100)%" }
            .drive(valueLabel.rx.text)
            .disposed(by: rx.disposeBag)
    }
}

Related