iOS开发之ReactiveCocoa框架(RAC)第五篇队列与高级函数

2023-11-14

.h文件

#import "ViewController.h"

@import ReactiveCocoa;

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    //push-driven pull-driven 两种类型驱动的模型
    //拉驱动        推驱动

//    __block int a =10;
//    RACSignal * s=[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
//        
//        //只有订阅者有订阅,block代码才执行。只有需求者有需求,生产者才能去生产,所以是一种拉动驱动的模式
//        a += 5;
//        
//        [subscriber sendNext:@(a)];
//        [subscriber sendCompleted];
//        
//        return [RACDisposable disposableWithBlock:^{
//            
//        }];
//    }] replayLast];
//    //replayLast 规避副作用,标识Signal是记录型的,它只是记录方法返回的值,而不会再次调用
//    
//    [s subscribeNext:^(id x) {
//        
//        NSLog(@"%@",x);
//    }];
//    
//    //第二次去订阅或者在不同的地方订阅
//    [s subscribeNext:^(id x) {
//        
//        NSLog(@"%@",x);
//    }];

    /*
     side effect 副作用
     在每次订阅信号量的时候,会导致信号量里面的代码重复的执行
     副作用有些地方是可以利用的,但是有些时候就需要规避它
     */

    /*
     RACSequence 也是继承与RACStream,本质上也是一种流
     与RACSignal的区别  它是一种推驱动,就是在它初始化的时候,内容就已经形成了,而RACSignal是在订阅的时候才会生成内容
     */
//    RACSequence * seq =[s sequence];
//    [seq signal];
    //RACSequence 与 signal 可以互相转换 意义是:例如signal是工厂的源头,转换成sequence的意义就是将生产出来的产品放在一个序列,放在一个容器里。
    //相反sequence转换signal:则是生产好的产品按照序列放到一个特即将发送的管道,去做为这个管道的发送源
    //从另外一个角度看,sequence队列实际是RAC世界里面的数组容器跟OC里面的NSArray是可以进行无缝转换的
    NSArray * array =@[@(1),@(2),@(3),@(4),@(5)];
    //数组转换成队列
     RACSequence * seq1 =[array rac_sequence];

    //队列转换成数组
//    [seq1 array];

    //map,filter,flattenMap,concat...
    //map映射
    NSArray * array1= [[seq1 map:^id(id value) {

        return @([value integerValue] * 3);
    }] array];
    NSLog(@"%@",array1);

    //filter筛选工作

    NSArray * array2 =[[seq1 filter:^BOOL(id value) {
        //返回布尔类型,表示队列里面是否还存留这个值
        return [value integerValue]%2 ==1;
    }] array];
    NSLog(@"%@",array2);

    //flattenMap整个RAC里面最重要的一个高级函数,但是实际应用到的地方很少,主要是RAC里面自己功能的实现 flattenMap先执行Map再执行flatten

//    [1,2]
//    [3,4]
//    [[1,2],[3,4]] 通过 flatten操作以后 转换成 [1,2,3,4]

//    concat 链接两个sequence
//      [1,2], [3,4]
//      [1,2,3,4]
//    RACSignal * s;
//    [s then:^RACSignal *{
//        
//        //忽略Signal再次订阅的方法
//    }];
    RACSignal * s1;
    RACSignal * s2;
    [[s1 concat:s2] subscribeNext:^(id x) {

        //s1 s2都会返回
    }];//串行Signal
    //与then的去呗
    [[s1 then:^RACSignal *{

        return s2;
    }] subscribeNext:^(id x) {

       //只会返回s2
    }];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS开发之ReactiveCocoa框架(RAC)第五篇队列与高级函数 的相关文章

  • iOS架构师_SDWebImage源码分析

    1 对SDdemo的分析 针对SD的3 8 2版本进行分析 因为从git上面直接下载SD的源码 项目运行会报错 缺少libwebp这个库 我们下载3 8 2版本 运行 libwebp 是个webp的图片格式 属于谷歌的库 所以只能翻墙去国外
  • 2022最新苹果开发者账号注册、付款流程图解【图文并茂】

    更新日期 2022 07 22 每年续费就有一个坑 文章末尾已注明 1 申请一个邮箱 用于注册苹果开发者账号 我的邮箱 密码 2 注册开发者账号 1 注册官网 官网地址 Apple Developer Program Apple Devel
  • iOS开发之第三方支付支付宝支付教程,史上最新最全第三方支付宝支付方式实现、支付宝集成教程,支付宝实现流程

    本章项目demo https github com zhonggaorong alipayDemo 支付宝支付大致流程为 1 公司与支付宝进行签约 获得商户ID partner 和账号ID seller 和私钥 privateKey 开发中
  • ios-常见的命令行工具

    pwd 查看当前目录 cat 在命令行中查看文件 ls 查看文件 ls l 就是以列表的形式展开 touch 创建文件 open 打开文件 more 分页查看文件内容 f是下一页 b是上一页 当你命令行有很多东西你写错了的时候不想去一一删除
  • xcodebuild使用

    转自 xcodebuild命令简单使用 简书 流程 build archive IPA teamid xcodebuild命令简单使用 前提准备证书并熟悉xcodebuild介绍 以及官方文档 xcodebuild showsdks查看可用
  • iOS 15 适配踩坑:NavigationBar、UITabBar失效问题

    苹果前两天推出了iOS 15 秋天都等不及 相关链接 ios 15 0 适配问题 NavigationBar和UITabBar失效问题 Xcode 13 beta版 iOS 15 beta 3的系统 除了客户提出的问题 自己还发现了两处UI
  • iOS 应用获取最上层全屏 Window 的正确方法

    有时候 我们需要将View添加到最上层的Window上 比如 弹出框 Loading等 经常有同学直接通过 UIApplication sharedApplication windows lastObject 来获取 这种方法是非常不严谨的
  • autorelease(IOS开发)的原理详解

    转载出处 http tieba baidu com p 3427605546 转载出处 http blog csdn net c395565746c article details 7613814 当您向一个对象发送一个autoreleas
  • iOS进阶_密码学(二.钥匙串访问)

    网络开发中的原则 在网络上不允许传输用户的明文隐私数据 在本地不允许保存用户的明文隐私数据 类似于QQ 微信的记住密码 在客户端本地保存用户加密后的密码 NSUserDefaults 明文保存才能反算 能够反算的算法 钥匙串访问 开放给开发
  • Xcode项目设置项中的LLVM

    LLVM是构架编译器
  • APNS编程----iOS真机测试消息推送

    一 准备工作 1 拥有一台iOS为操作系统的苹果设备 iPhone iPad iPod都可以 2 拥有苹果开发者账号 需要真机调试 最好是是付费开发者 后面的步骤将会更顺利 3 需要一台PC做推送服务器 如果是台拥有MAC OS系统 将会更
  • ad Hoc打包测试

    一 iOS证书 首先介绍一下iOS证书 iOS证书分两种 1 开发证书 用来给你 开发人员 做真机测试 2 发布证书 又分为两种 发布到app store 和发布测试的ad hoc证书 本文就详细讲解 ad hoc证书的创建 二 什么时候用
  • iOS左对齐自动换行collection样式

    前言 想必大家工作中或多或少会遇到下图样式的UI需求吧 像这种cell长度不固定 以此向右对齐排列的样式UI可以说是很常见的 实现方式 一般的实现可能主要是分一下两种 1 一种是用button依次排列实现 动态计算text宽度 记录之前一个
  • iOS开发之Runtime运行时机制

    摘要 Objective C是基于C加入了面向对象特性和消息转发机制的动态语言 除编译器之外 还需用Runtime系统来动态创建类和对象 进行消息发送和转发 作者通过分析Apple开源的Runtime代码来深入理解OC的Runtime机制
  • iOS17适配指南-新版

    文章目录 一 iOS17适配点 二 具体代码 一 iOS17适配点 UIView与UIViewController 可以设置数据为空时的占位视图 增加SymbolAnimations 通过addSymbolEffect 与removeSym
  • ios开发教程入门到精通

    第1集 初识macOS 点击观看 第2集 开发工具Xcode 点击观看 第3集 初识Objective C 点击观看 待续
  • Appstore审核被拒-[4. DESIGN: PREAMBLE]

    Appstore审核被拒原文如下 原因是设置里有一个版本信息可以响应点击事件进入一个版本详情页 苹果要求版本更新必须使用iOS版本更新内置更新机制 4 DESIGN PREAMBLE Design Preamble The version
  • iOS架构-组件化(项目框架搭建2)

    静态库引用静态库 如果像上图一样 直接在业务层组件引用数据层组件的文件 则会报错 因为组件之间没有建立引用关系 如下图 静态库如何引用Pods第三方库 拷贝Podfile文件到项目 打开终端执行pad install 直接引用Pod下面的Y
  • IOS开发系列——异步绘制专题

    异步绘制专题 1 图片处理 1 1 编辑图片的几个方法 第一种 先用UIImage对象加载一张图片 然后转化成CGImageRef放到CGContext中去编辑 第二种 用CGImageCreate函数创建CGImageRef 然后把CGI
  • 自定义modal转场动画,滑动手势控制 dismiss 过程

    效果 假设有 1 两个视图控制器 presentingVC presentedVC 2 一个继承于UIPercentDrivenInteractiveTransition 并遵守协议UIViewControllerAnimatedTrans

随机推荐