簡體   English   中英

如何使用 RXSwift 將 Object 的屬性綁定到 UIlabel?

[英]How to bind Object's property to an UIlabel using RXSwift?

我有一個 Model class 如下所示:

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
    }
}

當模型屬性的值發生變化時,我想更新 label。 我怎樣才能做到這一點?

您應該擁有數據 Model 的 Observable(例如,可能從服務器獲取),然后,您可以使用.bind(yourlabel.rx.text) 將其結果直接綁定到 label

每次值發生變化時,它也會通過綁定到您的 label 來更新您的視圖

嘗試使用 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)

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM