RXSwift

RxSwift---初体验(一)

2023-04-09  本文已影响0人  会骑车的iOSer

随着Swift在iOS开发中比重越来越大,接下来这个篇章我们一起来探索下RXSwift,领略下Swift以及RXSwift的魅力

函数响应式编程

一:函数式

函数式编程简称FP(Functional Programming),它是一种抽象程度很高的编程范式

函数式编程的一个特点就是:允许把函数本身作为参数传入另一个函数,同时还允许返回一个函数!

y = f(x) ---> x = f(x) ---> y = f(f(x)) , y = f(x)这里的x就转换成x = f(x)

正所谓光说不练假把式,那么来这样一个需求

     1.获取 数组[1,2,3,4,5,6,7] 大于 3的数字
     2.获取到数字之后 + 1
     3.最后取出它们之中的偶数
        let array = [1,2,3,4,5,6,7]
        
        for num in array {
            //1获取大于3的数字
            if num > 3 {
                let number = num + 1 //获取到数字之后 + 1
                if number % 2 == 0 {
                    print(number) //取出它们之中的偶数
                }
            }
        }

这样函数式编程就很好的解决了这些问题

        array.filter { $0 > 3} //1获取大于3的数字
            .filter { ($0+1) % 2 == 0 }//获取到数字之后 + 1,取出它们之中的偶数
            .forEach{print($0+1)}

二:响应式

就好像我们在某一时刻订阅了一个视频,在此之后这个视频的作者再发新的作品,我们也能收到作品的推送

在iOS开发中经常会响应一些事件buttontextFieldtextViewNSTimer等等这些,都需要做响应监听,响应后都需要在对应的响应事件中去做处理,而原生开发中,触发对象与响应方法是分离的,如button的初始化和点击响应方法是分离的。功能代码与逻辑代码分析,导致很多比较恶心的感觉!

biu biu biu RxSwift闪亮✨登场

RxSwift简介

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

RxSwfit有如下几个特性

一:button点击事件

    func setupButton() {
        //传统button添加ui事件 代码逻辑与事件逻辑分开 很恶心~~~~~
        self.button.addTarget(self, action: #selector(buttonAction(_:)), for: .touchUpInside)
        
        //Rx 功能逻辑和业务逻辑都在一起
        self.button.rx.controlEvent(.touchUpInside)
            .subscribe { _ in
                print("点击事件")
            }
            .disposed(by: disposeBag)
    }

二:textfiled文本响应

func setupTextFiled() {
        //如果需要监听textFiled输入值的变换
        //传统方式
//        self.textFiled.addTarget(self, action: #selector(<#T##@objc method#>), for: .valueChanged)
        //Rx
        self.textFiled.rx.text.orEmpty.changed
            .subscribe { text in
                print("监听到了 - \(text)")
            }
            .disposed(by: disposeBag)
    }

三:KVO

    func setupKVO() {
        //传统方式三步
        //1.订阅
        self.person.addObserver(self, forKeyPath: "name", options: .new ,context: nil)
    }
    
    //2.观察
    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        print("响应")
        print(change as Any)
    }
    
    //3.销毁
    deinit {
        self.removeObserver(self.person, forKeyPath: "name", context: nil)
    }

传统的方式使用KVO,我们从上面的代码可以感觉出来很恶心,我们看下RxSwift的实现方式

func setupKVO() {        
        //响应序列
        self.person.rx.observeWeakly(String.self, "name")
            .subscribe { value in
                print(value as Any)
            }
            .disposed(by: disposeBag)
    }

RxSwift这个框架非常牛逼,把函数响应式玩到了高潮!接下来跟着我一起来玩一玩RxSwift吧

上一篇 下一篇

猜你喜欢

热点阅读