响应式编程学习,学习使用RxSwift

文章综述:最近一直再看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)'