文章综述:最近一直再看RxSwift官方文档,同时也在看国内翻译比较好的文档靛青K,初步学习和尝试使用了RxSwift,下面是一些方法的介绍。我也找到github上面一个好的使用UITableView的例子,可惜运行不了了,经过修改,可以运行,也体验了这个过程。其地址:RxUITableViewControllerDemo.
下面的内容包括了很多的方法:
'let variable = Variable("z")
variable.asObservable().subscribe { (e) in
print("Subscription: 1,event: \(e)")
}.addDisposableTo(disposeBag)
variable.value = "a"
variable.value = "b"
variable.asObservable().subscribe { (e) in
print("Subscription: 2, event: \(e)")
}.addDisposableTo(disposeBag)
variable.value = "c"
variable.value = "d"
//map方法
let origunalSwquence = Observable.of(1,2,3)
origunalSwquence
.map { (number) -> Int in
number * 2
}
.subscribe { (e) in
print(e)
}.addDisposableTo(disposeBag)
//flatMap方法
let squenceInt = Observable.of(1,2,3)
let squenceString = Observable.of("A","B","C","D","E","F","--")
squenceInt
.flatMap { (x: Int) -> Observable<String> in
print("from squenceInt \(x)")
return squenceString
}
.subscribe {
print($0)
}
.addDisposableTo(disposeBag)
//scan方法
let sequenceToSum = Observable.of(0,1,2,3,4,5)
sequenceToSum
.scan(0) { (acum, elem) -> Int in
acum + elem
}
.subscribe {
print($0)
}
.addDisposableTo(disposeBag)
//reduce方法
sequenceToSum
.reduce(0) { (acum, elem) -> Int in
acum + elem
}
.subscribe { (sum) in
print("it is the final result \(sum)")
}.addDisposableTo(disposeBag)
//buffer方法
sequenceToSum
.buffer(timeSpan: 5, count: 2, scheduler: MainScheduler.instance)
.subscribe { (e) in
print(e)
}.addDisposableTo(disposeBag)
//windown 方法
sequenceToSum
.window(timeSpan: 5, count: 2, scheduler: MainScheduler.instance)
.subscribe { (e) in
print("windown = \(e)")
}.addDisposableTo(disposeBag)
sequenceToSum
.timeout(5, scheduler: MainScheduler.instance)
.subscribe { (e) in
print("timeout = \(e)")
}.addDisposableTo(disposeBag)
sequenceToSum
.delay(5, scheduler: MainScheduler.instance)
.subscribe { (e) in
print("delay = \(e)")
//效果比较明显,延迟5秒后,再输出
}.addDisposableTo(disposeBag)
//filter 实现便利操作 根据传入的predicate 进行筛选
Observable.of(0,1,2,3,4,5,6,7,8,9)
.filter {
$0 % 2 == 0
}.subscribe {
print($0)
}.addDisposableTo(disposeBag)
//DISTINCTUNTILCHANGED 阻止发射与上一个重复的值
Observable.of(1,2,3,1,1,2,5)
.distinctUntilChanged()
.subscribe {
print($0)
}.addDisposableTo(disposeBag)
Observable.of(1,2,3,4,5,6)
.skip(3)
.subscribe {
print($0)
}.addDisposableTo(disposeBag)
//debounce和throttle抑制发射过快的值:场景:比如点击一个Button会请求一下数据,然而总有人想连续不停的点,这是就可以起作用
Observable.of(1,2,3,4,5,6)
.debounce(5, scheduler: MainScheduler.instance)
.subscribe {
print($0)
}.dispose()
Observable.of(0)
.single()
.subscribe {
print($0)
}.addDisposableTo(disposeBag)'