我在iOS的视图模型中定义了一个视图模型属性,如下图所示。
var isIndividualActivity = BehaviorRelay<Bool>(value: false)
在视图控制器中,我想根据上述属性设置以下绑定。
isIndividualActivity
视图模型中的属性设置为真,则隐藏团队。UIView
并显示个人 UIView
. 当 isIndividualActivity
设置为 "假",则隐藏个人 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
s?
我还想用同样的属性来设置一个顶层约束的 UIView
如下图所示。我正在寻找一个选项来将布尔数据转换为一个 CGFloat
号,同时设置绑定。怎样才能实现呢?
viewModel.isIndividualActivity
.bind(to: pointViewTopConstraint.rx.constant)
.disposed(by: self.disposeBag)
PS:我知道我可以使用订阅功能在 isIndividualActivity
并做truefalse检查,设置视图的可见性和顶部约束。但是,我想知道是否有一种方法可以实现使用反布尔绑定,并在绑定时将bool转换为值。
你应该使用地图。
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)