如何使用 RXSwift 将 Object 的属性绑定到 UIlabel?
Posted
技术标签:
【中文标题】如何使用 RXSwift 将 Object 的属性绑定到 UIlabel?【英文标题】:How to bind Object's property to an UIlabel using RXSwift? 【发布时间】: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 将单个字符串变量绑定到标签。 什么会导致值改变? 【参考方案1】:您应该有一个数据模型的 Observable(例如可能从服务器获取),然后,您可以使用 .bind(yourlabel.rx.text) 直接将其结果绑定到您的标签
每次值发生变化时,它也会通过绑定到您的标签来更新您的视图
【讨论】:
【参考方案2】:尝试使用 BehaviorRelay
别忘了导入 RxSwift、RxCocoa
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)
【讨论】:
以上是关于如何使用 RXSwift 将 Object 的属性绑定到 UIlabel?的主要内容,如果未能解决你的问题,请参考以下文章