博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ReactiveCocoa学习笔记
阅读量:6619 次
发布时间:2019-06-25

本文共 2141 字,大约阅读时间需要 7 分钟。

一、RACSignal 信号类

// RACSignal使用步骤: 1.创建信号; 2.订阅信号; 3.发送信号;

// 1.创建信号(冷信号)

RACSignal*signal = [RACSignalcreateSignal:^RACDisposable*_Nullable(id_Nonnullsubscriber) {

// 3.发送信号

[subscribersendNext:@"hello, RAC."];

returnnil;

}];

// 2.订阅信号(热信号)

[signalsubscribeNext:^(id_Nullablex) {

NSLog(@"%@", x);

}];

// RACDynamicSignal信号执行顺序(注意:不同类型的信号处理的方式不同)

// 1.订阅信号会执行,创建信号时传入的didSubscribe block参数里的代码.

// 2.发送信号会执行,订阅信号时传入的nextBlock block参数里的代码.

  ReactiveCocoa中计时器的使用

[[RACSignalinterval:1.0onScheduler:[RACSchedulercurrentScheduler]]subscribeNext:^(idx) {

NSLog(@"%@", x);

}];

  ReactiveCocoa中超时

RACSignal*signal = [[RACSignalcreateSignal:^RACDisposable*(id subscriber) {

[subscribersendNext:@"hello, RAC."];

returnnil;

}]timeout:60.0onScheduler:[RACSchedulercurrentScheduler]];

[signalsubscribeNext:^(idx) {

NSLog(@"%@",x);

}error:^(NSError*error) {

NSLog(@"%@",error);

}];

   ReactiveCocoa中延时

[[[RACSignalcreateSignal:^RACDisposable*(id subscriber) {

[subscribersendNext:@"hello, RAC."];

returnnil;

}]delay:2.0]subscribeNext:^(idx) {

NSLog(@"%@",x);

}];

   RACsignal信号订阅与取消订阅

//  自动取消订阅

RACSignal*signal = [RACSignalcreateSignal:^RACDisposable*(id subscriber ) {

_subscriber= subscriber;

[subscribersendNext:@"hello, RAC."];

//如果信号不再发送数据,最好调用信号的发送完成方法,该方法会调用[RACDisposable disposable]取消订阅信号.

[subscribersendCompleted];

return[RACDisposabledisposableWithBlock:^{

//订阅者释放时会自动取消订阅信号,但是只要订阅者没有释放,就不会取消订阅信号.

NSLog(@"信号被取消订阅了!");

}];

//   手动取消订阅需要调用dispose方法

[_disposabledispose];

   RACSubject  与  RACReplaySubject  信号提供者

区别:RACSubject必须要先订阅信号之后才能发送信号,而RACReplaySubject可以先发送信号后订阅.

RACSubject代码示例:

//创建信号

RACSubject*subject = [RACSubjectsubject];

//订阅信号

[subjectsubscribeNext:^(idx) {

NSLog(@"订阅者一接收到信号: %@", x);

}];

//发送数据

[subjectsendNext:@"hello, RAC."];

//订阅信号

[subjectsubscribeNext:^(idx) {

NSLog(@"订阅者二接收到信号: %@",x);

}];

此时打印的结果如下:

RACSubject.jpeg

RACReplaySubject代码示例:

//创建信号

RACReplaySubject*replaySubject = [RACReplaySubjectsubject];

//订阅信号

[replaySubjectsubscribeNext:^(idx) {

NSLog(@"订阅者一接收到信号: %@", x);

}];

//发送数据

[replaySubjectsendNext:@"hello, RAC."];

//订阅信号

[replaySubjectsubscribeNext:^(idx) {

NSLog(@"订阅者二接收到信号: %@",x);

}];

此时打印的结果:

RACReplaySubject.jpeg

转载地址:http://zsupo.baihongyu.com/

你可能感兴趣的文章
GNU make manual 翻译(八十二)
查看>>
python批量下载图片的三种方法
查看>>
/bin/bash^M: bad interpreter: 没有那个文件或目录
查看>>
iOS - OC NSData 数据
查看>>
iOS - Quartz 2D 第三方框架 Charts 绘制图表
查看>>
MM顾问的常见面试问题(ZZ)
查看>>
转:Windows 8上强制Visual Studio以管理员身份运行
查看>>
迟来的加勒比海盗3 观后
查看>>
谈一谈互联网创业补贴变味后的现象
查看>>
MapGIS转Shp文件的单位问题
查看>>
使用Karate轻松实现自动API测试
查看>>
CentOS -bash: warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8)
查看>>
编写一个基本的Android应用程序
查看>>
我的友情链接
查看>>
查看Linux操作系统安装的位数(getconf 命令应用)
查看>>
ifstream读取文件失败和乱码问题
查看>>
Python信息采集器使用轻量级关系型数据库SQLite
查看>>
zookeeper中的exception的问题
查看>>
final+基本类型导致只编译常量类引起的错误
查看>>
分库分表的几种常见玩法及如何解决跨库查询等问题
查看>>