swift-RxSwift简单使用(一)

本篇会先介绍一些RxSwift这个响应式框架的基本使用。

RxSwift学习的必要性

复合 - Rx 就是和复合的代名词
复用 - 复用性比较强,代码量降低
清晰 - 因为声明都是不可变更,代码函数式编程可读性强
易用 - 理解容易,还抽象了异步编程,统一代码风格
稳定 - 因为Rx是完全通过单元测试的

RxSwift 基本介绍

gitHub地址

https://github.com/ReactiveX/RxSwift

如何导入

CocoaPods

# Podfile
use_frameworks!

target 'YOUR_TARGET_NAME' do
    pod 'RxSwift', '~> 5'
    pod 'RxCocoa', '~> 5'
end

# RxTest and RxBlocking make the most sense in the context of unit/integration tests
target 'YOUR_TESTING_TARGET' do
    pod 'RxBlocking', '~> 5'
    pod 'RxTest', '~> 5'
end

Carthage

github "ReactiveX/RxSwift" ~> 5.0

RxSwift基本使用

RxSwift基本使用.png

下面针对UIButton为例子做一个举例
比如我们点击了一个Btn,想要做一些事情
正常写法

        self.button.addTarget(self, action: #selector(clickAction), for: .touchUpInside)
//然后定义这个方法
@objc func clickAction(){
        print("点击了btn")
    }

RxSwift写法

self.button.rx.controlEvent(.touchUpOutside)
            .subscribe(onNext: { () in
                print("点击了btn")
            })
        .disposed(by: disposeBag)

另一中写法

self.button.rx.tap
            .subscribe(onNext: { () in
                print("点击了btn")
            })
            .disposed(by: disposeBag)

这个时候就比较有意思了,为什么通过调用rx.tap也可以实现这样的效果呢?

/*
我们点击到tap里面查看,发现它返回的其实就是上面的controlEvent(.touchUpInside),
也就是说开发者为了我们使用,将这个东东直接简化成了.tap,去代替了controlEvent(.touchUpInside)
毕竟我们使用UIButton大部分都是使用的UIControlTouchUpInside
**/
extension Reactive where Base: UIButton {
    
    /// Reactive wrapper for `TouchUpInside` control event.
    public var tap: ControlEvent {
        return controlEvent(.touchUpInside)
    }
}

RxSwift核心-Observable

通过上面的介绍之后,我们再来研究一下RxSwift是如何实现这一系列的事情的。


Observable.jpg

1.创建序列
通过Observable.create来创建一个可被观察的序列

 let ob = Observable.create { (obserber) -> Disposable in
            return Disposables.create()
        }

2.订阅序列
通过ob.subscribe来订阅
3.发送信号
通过.next() .onCompleted() .onError来发送信号

具体代码如下

// 1:创建序列
        let ob = Observable.create { (obserber) -> Disposable in
            // 3:发送信号
            obserber.onNext("继续")
            obserber.onCompleted()
            obserber.onError(NSError.init(domain: "coocieeror", code: 10087, userInfo: nil))
            return Disposables.create()
        }
// 2:订阅信号
        let _ = ob.subscribe(onNext: { (text) in
            print("订阅")
        }, onError: { (error) in
            print("error: \(error)")
        }, onCompleted: {
            print("完成")
        }) {
            print("销毁")
        }

具体解释目前还没有理解完整,后期持续更新关于Observable核心流程相关问题。欢迎大家指正~


Observable-核心流程.jpg

你可能感兴趣的:(swift-RxSwift简单使用(一))