【问题标题】:How to bind Object's property to an UIlabel using RXSwift?如何使用 RXSwift 将 Object 的属性绑定到 UIlabel?
【发布时间】:2019-10-04 06:31:30
【问题描述】:

我有一个模型类,如下所示:

class Model{
    var currentTemparature:String?
    var minTemparature:String?
    var maxTemparature:String?

    init(currentTemparature:String,minTemparature:String,maxTemparature:String) {
        self.currentTemparature = currentTemparature
        self.maxTemparature = maxTemparature
        self.minTemparature = minTemparature
    }
}

我想使用 RXSwift 将这些属性中的每一个绑定到 ViewController 中的 UILabel。

例如:

class ViewController:UIViewController{
    @IBOutlet var currentTemparatureLabel: UILabel!
    @IBOutlet var minTemparatureLabel: UILabel!
    @IBOutlet var maxTemparatureLabel: UILabel!

    func UpdateLabels(){
        let model = Model.init(currentTemparature: "25", minTemparature: "20", maxTemparature: "30")
        currentTemparatureLabel.text = model.currentTemparature
        minTemparatureLabel.text = model.minTemparature
        maxTemparatureLabel.text = model.maxTemparature
    }
}

当模型属性的值发生变化时,我想更新标签。我怎样才能做到这一点?

【问题讨论】:

  • 你已经研究/尝试了什么?
  • 我尝试使用 BehaviorRelay 将单个字符串变量绑定到标签。
  • 什么会导致值改变?

标签: swift rx-swift


【解决方案1】:

您应该有一个数据模型的 Observable(例如可能从服务器获取),然后,您可以使用 .bind(yourlabel.rx.text) 直接将其结果绑定到您的标签

每次值发生变化时,它也会通过绑定到您的标签来更新您的视图

【讨论】:

    【解决方案2】:

    尝试使用 BehaviorRelay

    别忘了导入 RxSwiftRxCocoa

    class Model{
        var currentTemparature: BehaviorRelay<String?>
        var minTemparature: BehaviorRelay<String?>
        var maxTemparature: BehaviorRelay<String?>
    
        init(currentTemparature:String,minTemparature:String,maxTemparature:String) {
            self.currentTemparature = .init(value: currentTemparature)
            self.maxTemparature = .init(value: maxTemparature)
            self.minTemparature = .init(value: minTemparature)
        }
    }
    
    class ViewController:UIViewController{
        @IBOutlet var currentTemparatureLabel: UILabel!
        @IBOutlet var minTemparatureLabel: UILabel!
        @IBOutlet var maxTemparatureLabel: UILabel!
    
        private var bag = DisposeBag()
    
        func UpdateLabels(){
            let model = Model.init(currentTemparature: "25", minTemparature: "20", maxTemparature: "30")
            
            model.currentTemparature.bind(to: currentTemparatureLabel.rx.text).disposed(by: bag)
            model.minTemparature.bind(to: minTemparatureLabel.rx.text).disposed(by: bag)
            model.maxTemparature.bind(to: maxTemparatureLabel.rx.text).disposed(by: bag)
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 2017-05-26
      • 2017-12-27
      相关资源
      最近更新 更多