Setting up the sliders with a ViewModel really helped my understanding of MVVM.
This is my VM:
```
class SettingsViewModel {
var ageRange: AgeRange = AgeRange(min: 18, max: 36)
var minAge: Int {
set(newValue) {
if newValue > ageRange.max { maxAge = newValue + 1 }
ageRange = AgeRange(min: max(18, newValue), max: ageRange.max)
bindableAge.value = ageRange
}
get {
return ageRange.min
}
}
var maxAge: Int {
set(newValue) {
if newValue < ageRange.min { minAge = newValue - 1 }
ageRange = AgeRange(min: ageRange.min, max: min(100, newValue))
bindableAge.value = ageRange
}
get {
return ageRange.max
}
}
var bindableAge = Bindable<AgeRange>()
}
```
Binding is straightforward:
```
settingsViewModel.bindableAge.bind { [unowned self] (ageRange) in
guard let ageRange = ageRange else { return }
let indexPath = IndexPath(row: 0, section: 5)
guard let cell = self.tableView.cellForRow(at: indexPath) as? AgeRangeCell else { return }
let (minAge, maxAge) = (ageRange.min, ageRange.max)
cell.minLabel.text = "Min \(minAge)"
cell.maxLabel.text = "Max \(maxAge)"
cell.minSlider.value = Float(minAge)
cell.maxSlider.value = Float(maxAge)
}
```
And handler code could not be simpler:
```
@objc fileprivate func handleMinAgeChange(slider: UISlider) {
settingsViewModel.minAge = Int(slider.value)
}
```