RxSwift <1> —— 初探

废话不多说,直接上干货!!!

函数响应式编程

函数式

函数式编程简称FP(Functional Programming),函数式编程是一种抽象程度很高的编程范式,将计算机运算看做数学中的函数计算,实际上纯粹的函数式语言编程编写的函数式没有变量,任何一个函数只要输入确定,则输出就确定,这样的模式我们称之为没有副作用。允许使用变量的程序设计语言,由于内部变量状态不确定,同样的输入,可能得到不同的输出结果,称之为函数副作用。

函数式编程特点是允许吧函数本身作为一个参数传递给另一个函数,同时韩允许返回另一个函数。例如:

                  函数表达式: y = f(x) ---> x = f(x) ---> y = f(f(x))

举个栗子
对于数组[1,2,3,4,5,6,7,8,9]首先获取》2的数字,在获取数字之后+1,在输出偶数:

                  let array = [1,2,3,4,5,6,7,8,9]
                  for num in array{
                       if num > 2{
                            let number = num + 1
                            if (number % 2 == 0) {
                                 print(number)
                                 }
                             }
                         }

以上是常规写法.如果这样实现呢:

                     let array = [1,2,3,4,5,6,7,8,9]
                          array.filter{$0 > 2}
                                  .filter{($0 + 1) % 2 == 1}
                                 .forEach{print($0)}

响应式

对象某一数据流发生变化作出的相应这种编码方式称之为响应式。
iOS开发中经常用需要相应一些事件,button,tap,textfield,textView,KVO等等。接下来就介绍大杀器-------RXSwift。

RXSwift

RxSwift 是 ReactiveX 家族的重要一员, ReactiveX 是 Reactive Extensions 的缩写,一般简写为 Rx。ReactiveX 官方给Rx的定义是:Rx是一个使用可观察数据流进行异步编程的编程接口。


2257417-8a63113cba6f9aec.png

ReactiveX 不仅仅是一个编程接口,它是一种编程思想的突破,它影响了许多其它的程序库和框架以及编程语言。它拓展了观察者模式,使你能够自由组合多个异步事件,而不需要去关心线程,同步,线程安全,并发数据以及I/O阻塞。

RxSwift 是 Rx 为 Swift 语言开发的一门函数响应式编程语言, 它可以代替iOS系统的 Target Action / 代理 / 闭包 / 通知 / KVO,同时还提供网络、数据绑定、UI事件处理、UI的展示和更新、多线程……

鉴于Swift日渐增长的影响力,ios开发者不可避免的要学习和使用Swift这门语言进行编程开发。而RxSwift对使用Swift的帮助有如下几点:

Swift为值类型,在传值与方法回调上有影响,RxSwift一定程度上弥补Swift的灵活性

  • RxSwift使得代码复用性较强,减少代码量
  • RxSwift因为声明都是不可变更,增加代码可读性
  • RxSwift使得更易于理解业务代码,抽象异步编程,统一代码风格
  • RxSwift使得代码更易于编写集成单元测试,增加代码稳定性

举几个常用的栗子:
1. button 点击响应

                           self.button.rx.tap
                                         .subscribe(onNext:{
                                                  print("button tap action")
                                          }).disposed(by: disposeBag)
        

2. textField 响应

                          self.textField.rx.text.orEmpty
                                           .skip(1)
                                           .distinctUntilChanged()
                                           .subscribe(onNext:{text in
                                                print(text)
                                            })
                                           .disposed(by: disposeBag)

3. scrollView响应

                          self.scrollView.rx.contentOffset.subscribe(onNext:{[weak self] (content) in
                                 guard let strongSelf = self else {return}
                                 strongSelf.view.backgroundColor = UIColor.init(red: content.y/255.0*0.6, green: content.y/255.0*0.3, blue: content.y/255.0*0.6, alpha: 1)
                               }).disposed(by: disposeBag) 

4. KVO

                           person.rx.observeWeakly(String.self, "name").subscribe(onNext: { (change) in
                                   print(change ?? "helloword")
                               }).disposed(by: disposeBag)

5. 通知

                         NotificationCenter.default.rx
                           .notification(UIResponder.keyboardWillShowNotification)
                           .subscribe { (event) in
                                   print(event)
                            }.disposed(by: disposeBag)     

6.手势

                        let tap = UITapGestureRecognizer()
                        self.label.addGestureRecognizer(tap)
                        self.label.isUserInteractionEnabled = true
                        tap.rx.event.subscribe { (event) in
                                 print("点了label")
                        }.disposed(by: disposeBag)  

7.定时器

                     timer = Observable.interval(1, scheduler: MainScheduler.instance)
                     timer.subscribe(onNext: { (num) in
                         print("hello word \(num)")
                    }).disposed(by: disposeBag)

RXSwift 实现的timer免去了传统的runloop影响,不需要关心销毁问题,不需要关心Scrollview滑动问题。

你可能感兴趣的:(RxSwift <1> —— 初探)