RAC学习笔记-RACStream

什么是 RAC?

今天从零开始学习RAC,不过什么是RAC这里就不介绍了,呵呵。
先从源码开始看起吧。
本文涉及的版本- ReactiveObjC (3.1.0)

RACStream

众所周知,RAC的核心是信号-RACSignal 进入源码

@interface RACSignal<__covariant ValueType> : RACStream

发现是继承RACStream,那就先从RACStream开始看起。

@interface RACStream<__covariant ValueType> : NSObject

<__covariant ValueType> 的意思是: __covariant 协变,子类转父类;泛型名字是ValueType

继续下面的代码

_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Wstrict-prototypes\"") \
typedef id _Nonnull (^RACReduceBlock)();
typedef ValueType _Nonnull (^RACGenericReduceBlock)();
_Pragma("clang diagnostic pop")

首先#pragma在本质上是声明,常用的功能就是注释,尤其是给Code分段注释;而且它还有另一个强大的功能是处理编译器警告
_Pragma()#pragma的另一种写法更加合理功能更多日后补充(TODO

clang diagnostic 是#pragma 第一个常用命令:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-相关命令"
    // 你自己的代码
#pragma clang diagnostic pop

这里的-Wstrict-prototypes 是警告: 函数声明不是一个原型
函数声明 函数原型  还要多了解一下。
总之这里就是忽略警告的意思

具体实现代码

抽象方法

RACStream中的许多定义都是抽象的,没有具体实现,需要由其子类进行实现。

+empty;
/// Returns an empty stream.
//__kindof:表示当前类或者它子类
//
+ (__kindof RACStream<ValueType> *)empty;
+ (__kindof RACStream *)empty {
   
	NSString *reason = [NSString stringWithFormat:@"%@ must be overridden by subclasses", NSStringFromSelector(_cmd)];
	@throw [NSException exceptionWithName:NSInternalInconsistencyException reason:reason userInfo:nil];
}
`因为RAC中nil会导致crash,所以很多时候需要定义一个空对象来替代nil,一般empty都被创建为一个单例来使用。
这个方法也是由子类来实现的`
+return
/// Lifts `value` into the stream monad.
///
/// Returns a stream containing only the given value.
+ (__kindof RACStream<ValueType> *)return:(nullable ValueType)value;
+ (__kindof RACStream *)return:(id)value {
   
	NSString *reason = [NSString stringWithFormat:@"%@ must be overridden by subclasses", NSStringFromSelector(_cmd)];
	@throw [NSException exceptionWithName:NSInternalInconsistencyException reason:reason userInfo:nil];
}

`把一个值包装成对应的RACStream的子类型。
也是需要子类重写的`

今天先写到这里

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值