// 接下來咱們處理性別選擇
// 如今咱們想象性別選擇按鈕的背後的邏輯
// 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