Front-end
Apple
Apple
  • 第三方库
    • RAC库
      • ReactiveObjc
        • 如何实现的
        • 有关类
        • 有关协议
        • 关键概念列表
          • RACSignal有关类
            • RACStream
              • 头文件定义
            • RACSignal
              • 头文件定义内容
              • 核心代码
              • 常用的方法
                • concat:
                • bind:
                • zipWith 和merge
            • RACSubject
              • 内容
            • RACReplaySubject
              • 内容
            • RACBehaviorSubject
              • 内容
            • RACGroupedSignal
              • 内容
            • RACDynamicSignal
              • RACDynamicSignal
              • RACSignal vs RACDynamicSignal
            • RACReturnSignal
              • 内容
            • RACErrorSignal
            • RACEmptySignal
            • RACChannelTerminal
            • 疑问
              • RACChannelTerminal vs RACSubject
              • RACSignal vs RACStream
              • 热信号和冷信号
                • 进一步理解
              • 信号的发送者和接受者
                • RACSignal 不是信号对象么?为什么信号的发送者是自己呢?
          • RACChannel有关类
            • RACChannel
              • Page 1
              • 用于MVVM架构
              • RAC() vs RACChannelTo()
            • RACKVOChannel
              • 内容
              • 封装了系统的KVO
          • RACCommand
          • RACSubscriber
          • RACTuple
          • RACSequence有关类
          • RACKVOTrampoline
            • NSObject+RACKVOWrapper.h
            • NSObject+RACKVOWrapper.m
          • Page
          • 宏
          • 疑问
            • RACCommand vs RACSignal
            • 有了信号量,为什么还需要RACCommand
        • 操作方法
          • reduce
            • reduce 在不同语言以及库中是否一样的概念?
      • ReactiveSwift
        • 相比ReactiveObjc
      • RxSwift
      • Combine
      • 疑问
        • 热信号 vs 冷信号
        • ReactiveObjC 和 ReactiveSwift 实现原理差异
        • ReactiveObjC、ReactiveCocoa、ReactiveSwift的关系与区别
        • ReactiveObjC、ReactiveCocoa、ReactiveSwift内容
        • ReactiveSwift vs RxSwift
        • RxSwift、ReactiveSwift 和 ReactiveObjC
        • RxSwift、ReactiveSwift 、Combine
    • swift源码
      • 编译
        • 命令参数解释
        • 涉及到的工具
          • cmake 和 ninja
          • sccache
        • Rosetta模式
        • 遇到问题
          • FETCH_HEAD': Permission denied
          • --local_compiler_build': No such file or directory
          • ld: unsupported tapi file type '!tapi-tbd' in YAML file
          • python --version 显示没有这个命令
          • ModuleNotFoundError: No module named 'packaging'
          • ModuleNotFoundError: No module named 'sphinx'
            • sphinx是什么
          • ERROR: Could not find a version that satisfies the requirement sphinx (from versions: none)
          • /Applications/Python\ 3.x/Install\ Certificates.command 失败
          • 已经安装了sphinx,还是显示错误
      • 涉及到的知识点
        • Swift中的MCCAS
Powered by GitBook
On this page
  1. 第三方库
  2. RAC库
  3. ReactiveObjc
  4. 关键概念列表
  5. RACSignal有关类
  6. RACStream

头文件定义

这几个方法需要子类去重写的

  • 创建空流:+ (RACStream *)empty;

  • 将单个值转换为流:+ (RACStream *)return:(id)value;

  • 绑定值到块:- (RACStream *)bind:(RACStreamBindBlock (^)(void))block; 允许早期终止或闭包状态

  • 连接流:- (RACStream *)concat:(RACStream *)stream; 连接两个相同类型的流

  • 打包流:- (RACStream *)zipWith:(RACStream *)stream; 将多个流中的值组合成元组

  • 映射和扁平化:- (RACStream *)flattenMap:(RACStream * (^)(id value))block; 应用于每个值并合并结果流

  • flatten:将嵌套的数据流扁平化为单一数据流,并保留原始数据流的名字。

  • map:对数据流中的每个值应用转换块(block),并设置转换后的新数据流名称。其中block参数不能为空。

  • mapReplace 收一个对象object作为参数,并返回一个新的RACStream

  • 过滤:- (RACStream *)filter:(BOOL (^)(id value))block; 过滤不符合条件的值

  • 忽略特定值:-ignore: 接收一个参数 value,并返回一个新的 RACStream 对象。

  • startWith::此函数接收一个值,并创建一个新的流,在原有流开始前先发出这个值。

  • 跳过值:- (RACStream *)skip:(NSUInteger)skipCount; 跳过指定数量的初始值

  • 取前N个值:- (RACStream *)take:(NSUInteger)count; 取指定数量的初始值

  • combinePreviousWithStart:reduce: 用于创建一个新的数据流,该流中的每个元素都是基于初始值start和前一个元素计算得出的结果。

  • join:函数:将多个流组合成一个流,每个值被包装成元组。首次迭代时,将第一个流的值包装为单元素元组;后续迭代调用block方法组合当前流和新加入的流。

  • zip:函数:通过join:函数实现对多个流的逐元素组合,并返回一个新的流。

  • zip:reduce:函数:与zip:类似,但额外应用一个reduce操作来处理组合后的元素,最终生成新的流。

  • concat:函数:将多个流依次连接成一个连续的流。

  • 归约:- (RACStream *)reduceEach:(RACReduceBlock)reduceBlock; 对每个元组值进行归约处理

  • 扫描:- (RACStream *)scanWithStart:(id)startingValue reduce:(id (^)(id running, id next))reduceBlock; 从左至右结合值生成新流

  • scanWithStart:reduceWithIndex::同样接收初始值和累积块,但累积块还接收当前元素索引,并返回处理后的新流。内部通过bind方法实现累积操作,并更新累积值和索引。

  • takeUntilBlock::返回一个新的流,该流会持续传递值直到predicate首次为真。

  • takeWhileBlock::通过取反predicate调用takeUntilBlock:来实现,返回一个流,当predicate为真时继续传递值。

  • skipUntilBlock::返回一个新的流,在predicate首次为真之前忽略所有值。

  • skipWhileBlock::通过取反predicate调用skipUntilBlock:来实现,返回一个流,在predicate为假之前忽略所有值。

  • distinctUntilChanged:返回一个新的流,只在值发生变化时传递,相同值会被过滤掉。

PreviousRACStreamNextRACSignal

Last updated 8 months ago