我在iOS的视图模型中定义了一个视图模型属性,如下所示。
var isIndividualActivity = BehaviorRelay<Bool>(value: false)
在视图控制器中,我想根据上述属性设置下面的绑定。
- 当视图模型中
isIndividualActivity
属性设置为 true 时,隐藏团队UIView
并显示单个UIView
。当isIndividualActivity
设置为 false 时,隐藏单个UIView
并显示团队UIView
。我想通过绑定如下所示的内容来实现这一点。
viewModel.isIndividualActivity
.bind(to: individualView.rx.isHidden)
.disposed(by: self.disposeBag)
viewModel.isIndividualActivity
.bind(to: teamView.rx.isHidden)
.disposed(by: self.disposeBag)
如何在绑定到这两个UIView
时使用相同的属性并反转布尔绑定?
我还希望使用相同的属性来设置
UIView
的顶部约束,如下所示。我正在寻找在设置绑定时将布尔数据转换为CGFloat
数字的选项。我怎样才能做到这一点?viewModel.isIndividualActivity .bind(to: pointViewTopConstraint.rx.constant) .disposed(by: self.disposeBag)
PS:我知道我可以在isIndividualActivity
上使用订阅功能并进行真/假检查并设置视图的可见性和顶部约束。但是,我想知道是否有办法实现使用反向布尔绑定并在绑定时将布尔值转换为值。
你应该使用 map:
viewModel.isIndividualActivity
.map(!)
.bind(to: individualView.rx.isHidden)
.disposed(by: self.disposeBag)
viewModel.isIndividualActivity
.map { isActivity -> CGFloat in
isActivity ? 40 : 0 //example values
}
.bind(to: pointViewTopConstraint.rx.constant)
.disposed(by: self.disposeBag)