您的位置:首页 > 移动开发 > Swift

RxSwift 中监听对象属性改变的方式小结:rx_observe, PublishSubject 和 Variable

2016-08-21 00:52 896 查看
日常开发中,我们经常都要去观察一个对象属性的改变,那么我们怎么去监听它比较好呢?

我们的选择还是蛮多的,不过这里我们仅讨论
RxSwift
世界中的方案。

rx_observe

我们首先就会发现
rx_observe
这个方法,然后写出类似下面的代码:

viewModel
.rx_observe(Int.self, "intVar")
.subscribeNext { [weak self] (value) in

}
.addDisposableTo(disposeBag)


我是很不喜欢这个方案的,因为它严重依赖属性名字的字符串,这是很不安全的做法,比较容易写错,变量更名的时候也很头疼。如果不是监听我们不能改变的代码,建议不要用这个方案。

PublishSubject

如果您也用过
ReactiveCocoa
,桥接过非
RAC
世界的东西到
RAC
世界,那么您一定知道
Subject
,显然
RxSwift
中也有
Subject
.

配合
Swift
didSet
,我们可以写出如下代码:

var intVar: Int {
didSet {
_rx_intVar.onNext(intVar)
}
}

var rx_intVar: Observable<Int> {
return _rx_intVar.asObservable()
}

private var _rx_intVar = PublishSubject<Int>()


这个方案比上一个方案好多了,没有硬编码的字符串(属性名),但似乎看起来很啰嗦(确实也是如此)。

Variable

其实
RxSwift
还给了我们一个方便的方案,那就是
Variable
,我们来看看怎么写:

var rx_intVar: Variable<Int> = Variable(0)

var intVar: Int {
get {
return rx_intVar.value
}
set {
rx_intVar.value = newValue
}
}


显然这是我最喜欢的方案,示例中的
intVar
在外界看起来跟没有用
RxSwift
的时候没有什么差别,同时我们还能通过
rx_intVar
监听它的变化,又没有硬编码字符串依赖。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  RxSwift Swift iOS