在RX Swift iOS中设置绑定时转换属性值。

问题描述 投票:0回答:1

我在iOS的视图模型中定义了一个视图模型属性,如下图所示。

var isIndividualActivity = BehaviorRelay<Bool>(value: false)

在视图控制器中,我想根据上述属性设置以下绑定。

  1. 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)

如何使用相同的属性,并反转布尔绑定,同时绑定到这两个 UIViews?

  1. 我还想用同样的属性来设置一个顶层约束的 UIView 如下图所示。我正在寻找一个选项来将布尔数据转换为一个 CGFloat 号,同时设置绑定。怎样才能实现呢?

        viewModel.isIndividualActivity
            .bind(to: pointViewTopConstraint.rx.constant)
        .disposed(by: self.disposeBag)
    

PS:我知道我可以使用订阅功能在 isIndividualActivity 并做truefalse检查,设置视图的可见性和顶部约束。但是,我想知道是否有一种方法可以实现使用反布尔绑定,并在绑定时将bool转换为值。

ios swift rx-swift
1个回答
0
投票

你应该使用地图。

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)
© www.soinside.com 2019 - 2024. All rights reserved.