// 接下来咱们处理性别选择
// 如今咱们想象性别选择按钮的背后的逻辑
// 1 : 性别的选择 和 上面生日的选择 决定下面更新按钮 : 咱们常见的必选项
// 2 : 性别的选择 是由咱们的两个按钮的处理,咱们不必分开逻辑
let genderSelectOB = Variable<LGGender>(.notSelcted)
maleBtn.rx.tap
.map{ LGGender.male } // 男生的序列
.bind(to: genderSelectOB) // 绑定到咱们定义的序列
.disposed(by: disposeBag)
femaleBtn.rx.tap
.map{ LGGender.female } // 男生的序列
.bind(to: genderSelectOB) // 绑定到咱们定义的序列
.disposed(by: disposeBag)
复制代码
// 首先咱们的出生日期不能早于今天,不然边框变色
let birthdayOB = birthdayPicker.rx.date
.map { LGDataPickerValidator.isValidDate(date: $0) }
// 背景色
birthdayOB.map { $0 ? UIColor.orange : UIColor.clear}
.subscribe(onNext: { (color) in
self.birthdayPicker.layer.borderColor = color.cgColor
})
.disposed(by: disposeBag)
// 按钮点击 - 常规思惟就是给一个变量记录
// Rx思惟 应该是绑定到相应的序列里面去
// 这样的序列就是咱们的 genderSelectionOb : male female male ...枚举的值
let genderSELOB = genderSelectOB.asObservable().map { $0 != .notSelcted ? true : false }
// 控制咱们的点击更新按钮 - 被两个序列共同影响
Observable.combineLatest(birthdayOB,genderSELOB) { $0 && $1}
.bind(to: updateBtn.rx.isEnabled)
.disposed(by: disposeBag)
复制代码
/**
对于UISwitch来讲:
当UISwitch为OFF时,表示用户不了解Swift,所以,下面的UISlider应该为0;
当UISwitch为ON时,能够默认把UISlider设置在1/4的位置,表示大体了解;
对于UISlider来讲:
当UISlider不为0时,应该自动把UISwitch设置为ON;
当UISlider为0时,应该自动把UISwitch设置为OFF;
*/
// on off -> 0.25 0
knowSwiftSwitch.rx.value.map { $0 ? 0.25 : 0}
.bind(to: swiftLevelSlider.rx.value)
.disposed(by: disposeBag)
复制代码
// 0 1 true false
swiftLevelSlider.rx.value.map { $0 != 0 ? true : false}
.bind(to: knowSwiftSwitch.rx.isOn)
.disposed(by: disposeBag)
复制代码
passionToLearnStepper.rx.value.skip(1).subscribe(onNext: { (value) in
self.heartHeightConstraint.constant = CGFloat(value - 10)
}).disposed(by: disposeBag)
复制代码
效果图:swift