当前位置: 首页 > news >正文

RxSwift

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

fileprivate lazy var bag: DisposeBag =  DisposeBag()

//按钮点击
btn.rx.tap.subscribe { (event:Event<()>) in
            print("ddd")
        }.disposed(by: bag)

//文字改变
textField.rx.text.subscribe { (event:Event<(String?)>) in
            print(event)
        }.disposed(by: bag)

//kvo
        myLabel.rx.observe(String.self, "text")
            .subscribe(onNext: { (str : String?) in
                print(str ?? "")
            }).disposed(by: bag)
        myLabel.text = "dacai"

//监听tableView 滚动
        scrool.contentSize = CGSize(width: 1000, height: 0)
        scrool.rx.contentOffset
            .subscribe(onNext: { (point : CGPoint) in
                print(point)
            }).disposed(by: bag)

 

基本操作
 

class ViewController: UIViewController {
    
    fileprivate lazy var bag : DisposeBag = DisposeBag()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 1.创建一个never的Obserable
        let neverO = Observable<String>.never()
        neverO.subscribe { (event : Event<String>) in
            print(event)
        }.addDisposableTo(bag)
        
        // 2.创建一个empty的Obserable
        let emptyO = Observable<String>.empty()
        emptyO.subscribe { (event : Event<String>) in
            print(event)
        }.addDisposableTo(bag)
        
        print("--------------------")
        
        // 3.创建一个just的Obserable
        let justO = Observable.just("coderwhy")
        justO.subscribe { (event : Event<String>) in
            print(event)
        }.addDisposableTo(bag)
        
        print("--------------------")
        
        // 4.创建一个of的Obserable
        let ofO = Observable.of("a", "b", "c")
        ofO.subscribe { (event : Event<String>) in
            print(event)
        }.addDisposableTo(bag)
        
        print("--------------------")
        
        // 5.创建一个from的Obserable
        let array = [1, 2, 3, 4, 5]
        let fromO = Observable.from(array)
        fromO.subscribe { (event : Event<Int>) in
            print(event)
        }.addDisposableTo(bag)
        
        print("--------------------")
        
        // 6.创建一个create的Obserable
        let createO = createObserable()

        createO.subscribe { (event : Event<Any>) in
            print(event)
        }.addDisposableTo(bag)
        
        let myJustO = myJustObserable(element: "coderwhy")
        myJustO.subscribe { (event : Event<String>) in
            print(event)
        }.addDisposableTo(bag)
        
        print("--------------------")
        
        // 7.创建一个Range的Obserable
        let rangeO = Observable.range(start: 1, count: 10)
        rangeO.subscribe { (event : Event<Int>) in
            print(event)
        }.addDisposableTo(bag)
        
        print("--------------------")
        
        // 8.repeatElement
        let repeatO = Observable.repeatElement("hello world")
        repeatO
            .take(5)
            .subscribe { (event : Event<String>) in
                print(event)
            }
            .addDisposableTo(bag)
    }

    
}


extension ViewController {
    fileprivate func createObserable() -> Observable<Any> {
        return Observable.create({ (observer : AnyObserver<Any>) -> Disposable in
            observer.onNext("coderwhy")
            observer.onNext("18")
            observer.onNext("1.88")
            observer.onCompleted()
            
            return Disposables.create()
        })
    }
    
    fileprivate func myJustObserable(element : String) -> Observable<String> {
        return Observable.create({ (observer : AnyObserver<String>) -> Disposable in
            observer.onNext(element)
            observer.onCompleted()
            
            return Disposables.create()
        })
    }
}


//创建订阅者
 

        //订阅者只能接受, 订阅之后发出的事件
        let publishSub = PublishSubject<String>()
        publishSub.onNext("18")
        publishSub.subscribe { (event : Event<String>) in
            print(event)
            }.disposed(by: bag)
        publishSub.onNext("coderwhy")
        
        
        //订阅者可以接受订阅之前的事件&订阅之后的事件
        let replaySub = ReplaySubject<String>.createUnbounded()
        replaySub.onNext("a")
        replaySub.onNext("b")
        replaySub.onNext("c")
        replaySub.subscribe { (event : Event<String>) in
            print(event)
            }.disposed(by: bag)
        
        replaySub.onNext("d")
        
        
        print("-------------------------")
        // 3.BehaviorSubject, 订阅者可以接受,订阅之前的最后一个事件
        let behaviorSub = BehaviorSubject(value: "a")
        
        behaviorSub.subscribe { (event : Event<String>) in
            print(event)
            }.disposed(by: bag)
        
        behaviorSub.onNext("e")
        behaviorSub.onNext("f")
        behaviorSub.onNext("g")
        
        print("-------------------------")
        
        
        
        
        
        // 4.Variable
        /*
         Variable
         1> 相当于对BehaviorSubject进行装箱
         2> 如果想将Variable当成Obserable, 让订阅者进行订阅时, 需要asObserable转成Obserable
         3> 如果Variable打算发出事件, 直接修改对象的value即可
         4> 当事件结束时,Variable会自动发出completed事件
         */
        print("============")
        let variable = Variable("a")
        
        //variable.value = "b"
        
        variable.asObservable().subscribe { (event : Event<String>) in
            print(event)
            }.disposed(by: bag)
        
        variable.value = "c"
        variable.value = "d"

 

数据操作:

      let array2 = array.map({ $0 * $0 })
        print(array2)
        
        Observable.of(1, 2, 3, 4)
            .map { (num : Int) -> Int in
                return num * num
            }
            .subscribe { (event : Event<Int>) in
                print(event)
            }
            .disposed(by: bag)
        
        
        // 3.flatMap使用
        let stu1 = Student(score: Variable(80))
       // let stu2 = Student(score: Variable(100))
        
        let studentVariable = Variable(stu1)
        
        
        studentVariable.asObservable()
            .flatMap { (stu : Student) -> Observable<Double> in
                return stu.score.asObservable()
            }
            .subscribe { (event : Event<Double>) in
                print(event)
            }
            .disposed(by: bag)
        
           stu1.score.value = 1000

https://www.jianshu.com/p/431f645cb805

转载于:https://my.oschina.net/zhaodacai/blog/1602872

相关文章:

  • 1.3. 服务器部署与网络拓扑
  • MySQL 大表优化方案
  • 004-unity3d MonoBehaviour脚本方法简介
  • JS-DOM的知识点及应用
  • 怎样做网站优化才能更有效的吸引蜘蛛来访?
  • centos--git搭建之Gogs安装
  • 记一次kafka故障
  • Visual Studio Code支持JUnit
  • “大数据应用场景”之隔壁老王(连载四)
  • vfp9写的爬虫前段,基于webbrowser
  • CSS定宽居中的实现方案
  • 思科——NAT的应用
  • Webpack3之雪碧图插件(WEBPACK-SPRITESMITH配置简述)
  • 一万元搭建深度学习系统:硬件、软件安装教程,以及性能测试
  • linux 环境变量配置(node)
  • ➹使用webpack配置多页面应用(MPA)
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • C语言笔记(第一章:C语言编程)
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Javascripit类型转换比较那点事儿,双等号(==)
  • js如何打印object对象
  • python_bomb----数据类型总结
  • Python十分钟制作属于你自己的个性logo
  • STAR法则
  • Terraform入门 - 1. 安装Terraform
  • 复习Javascript专题(四):js中的深浅拷贝
  • 盘点那些不知名却常用的 Git 操作
  • 如何合理的规划jvm性能调优
  •  一套莫尔斯电报听写、翻译系统
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • # 透过事物看本质的能力怎么培养?
  • (1)(1.13) SiK无线电高级配置(六)
  • (2020)Java后端开发----(面试题和笔试题)
  • (arch)linux 转换文件编码格式
  • (vue)页面文件上传获取:action地址
  • (zt)最盛行的警世狂言(爆笑)
  • (搬运以学习)flask 上下文的实现
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (三)Honghu Cloud云架构一定时调度平台
  • (四)模仿学习-完成后台管理页面查询
  • (算法)Game
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET6 命令行启动及发布单个Exe文件
  • .NET6实现破解Modbus poll点表配置文件
  • .NET关于 跳过SSL中遇到的问题
  • .NET学习全景图
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • []error LNK2001: unresolved external symbol _m
  • [AIGC] Spring Interceptor 拦截器详解
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [android] 天气app布局练习