美文网首页
RxSwift 初探

RxSwift 初探

作者: zhongxiaoyue | 来源:发表于2019-07-21 22:33 被阅读0次

    RxSwift 简介

    • ReactiveX(简写: Rx) 是一个函数式响应式编程的基础框架,可以帮助我们简化编程。
    • RxSwiftRxSwift 版本。

    函数式响应式编程(FRP)

    • 函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。
      和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。
      和过程化编程相比,函数式编程里函数的计算可随时调用。
    • 响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。

    为什么要用RxSwift

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

    可观察序列(Observable)

    可观察序列(Observable) ,序列中主要有三种类型的数据(信号), Next,Error,Complete.如下图:

    Observable
    • Next 是 Observable 用来交付正常数据(信号).
    • Error 可以交付错误信号,就是去通知 Observer,哪里出了问题
    • Complete 可以通知 Observer 已经完成,没有可以提交的数据了
    • 示例代码
    let url = URL.init(string: "http://www.baidu.com")!
    let urlRequest = URLRequest.init(url: url)
    URLSession.shared.rx.response(request: urlRequest)
        .subscribe(onNext: { (response,data) in
            
            print("接收响应数据\(data)")
        }, onError: { (error) in
            
            print("错误\(error)")
        }, onCompleted: {
            
            print("完成")
        })
    

    Observable 核⼼流程

    主要分为三步:

    • Create: 创建可观察的序列
    • Subscribe: 添加订阅
    • on: 发送信号,Next,Error,Complete.
    Observable 核⼼流程
    • 示例代码
    // 1. 创建一个序列
    let ob = Observable<Any>.create{ (ob) -> Disposable in
        
        // 3. 发送信号
        ob.onNext("zhongxiaoyue")
        ob.onCompleted()
        
        return Disposables.create()
    }
    
    // 2.给这个序列 添加一个订阅者
    let _ = ob.subscribe(onNext: { (text) in
        
        print("接收到信号:\(text)")
    }, onError: { (error) in
        
        print("发生错误error: \(error)")
    }, onCompleted: {
        
        print("完成")
    }) {
        
        print("销毁")
    }
    

    RxSwift 应用示例

    • 网络请求
    func setupNextwork() {
        
        let url = URL(string: "https://www.baidu.com")
        URLSession.shared.rx.response(request: URLRequest(url: url!))
        .subscribe(onNext: { (response,data) in
            print(response)
        }).disposed(by: disposeBag)
        
    }
    
    • timer定时器
    func setupTimer() {
    
        timer = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
        timer.subscribe(onNext: { (num) in
            print(num)
        })
        .disposed(by: disposeBag)
    }
    
    • 通知
    func setupNotification(){
        NotificationCenter.default.rx.notification(UIResponder.keyboardWillShowNotification)
            .subscribe(onNext: { (noti) in
                print(noti)
            })
            .disposed(by: disposeBag)
        
    }
    
    • 手势
    func setupGestureRecognizer(){
        
        let tap = UITapGestureRecognizer()
        self.label.addGestureRecognizer(tap)
        self.label.isUserInteractionEnabled = true
        tap.rx.event
            .subscribe(onNext: { (tap) in
                print(tap.view)
            })
            .disposed(by: disposeBag)
    }
    
    • scrollView
    func setupScrollerView() {
    
        scrollView.rx.contentOffset
            .subscribe(onNext: { [weak self](content) in
                self?.view.backgroundColor = UIColor.init(red: content.y/255*0.8, green: content.y/255*0.6, blue: content.y/255*0.3, alpha: 1)
            })
            .disposed(by: disposeBag)
    }
    
    • textfiled
    func setupTextFiled() {
        
        self.textFiled.rx.text.orEmpty
            .subscribe(onNext: { (text) in
               print(text)
            })
            .disposed(by: disposeBag)
    }
    
    • button响应
    func setupButton() {
    
        self.button.rx.tap
            .subscribe(onNext: { () in
                print("点击了")
            })
            .disposed(by: disposeBag)
    }
    
    • KVO
    func setupKVO() {
        
        self.person.rx.observeWeakly(String.self, "name")
            .subscribe(onNext: { (value) in
                print(value as Any)
            })
            .disposed(by: disposeBag)
    }
    

    相关文章

      网友评论

          本文标题:RxSwift 初探

          本文链接:https://www.haomeiwen.com/subject/krovlctx.html