ReactiveCocoa-如何一次从RACSequence获取一件物品?

PIC您的脑子

我一直在阅读RACSequence是“拉动式”的。有人可以向我解释如何按需从序列中“抽取”价值吗?

说我有一个数组,我已经将其转换为信号。然后说还有另一个信号,当在其上发送一个值时,我想从数组序列中获取下一个值。我将如何实现?这是我尝试过的方法,但是不起作用。

RACSignal *arraySig = [@[@1, @2, @3].rac_sequence signal];
RACSubject *triggerSig = [RACSubject subject];

[[[arraySig doNext:^(id x) {
        DDLogVerbose(@"DoNext got %@ from array", x);
    }]
    sample:triggerSig]
    subscribeNext:^(id x) {
        DDLogVerbose(@"Subscriber got %@ from array", x);
    }];

[triggerSig sendNext:@"Give me data!"];

// I expect to see "Got 1 from array" printed out

编辑:我更新了上面的示例,以便在该示例之前有一个下一步,最后是一个订户。

这是我得到的输出:

DoNext got 1 from array
DoNext got 2 from array
DoNext got 3 from array

没有值传递给订户。我认为这sample不是我想要的。对我来说,它看起来像sample订阅信号,并立即发送数组中的值。但是,样本会阻止值传递到订阅服务器,直到样本信号发送为止。我的理论是,在触发信号发送时,数组中的所有值都已发送。尽管好像是这种情况,但订户至少会获得发送的最后一个值@ 3。

帕特里克·培根

您应该能够做到这一点 +zip:reduce:

RACSignal *arraySig = [@[@1, @2, @3].rac_sequence signal];
RACSubject *triggerSig = [RACSubject subject];

[[RACSignal zip:@[arraySig, triggerSig] reduce:^id(id arrayVal, id triggerVal) {
    return arrayVal;
}] subscribeNext:^(id x) {
    DDLogVerbose(@"Subscriber got %@ from array", x);
}];

[triggerSig sendNext:@"Give me data!"];

压缩操作在将两个信号传递给reduce之前都等待来自两个信号的值。因此,在您的情况下,它将在发送下一对值之前等待触发器触发。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

带有ReactiveCocoa的MVVM,ViewModel如何告诉View进行一次一次性操作?

ReactiveCocoa-如何使用“ switchToLatest”处理信号?

如何使用ReactiveCocoa简化嵌套的for循环?

如何使用ReactiveCocoa实现承诺模式?

如何使用CocoaPods正确安装ReactiveCocoa?

ReactiveCocoa将SignalProducers整合为一个

通过ReactiveCocoa获取“使用未声明的类型'NoError'”

如何在ReactiveCocoa 4中创建自定义信号?

如何在项目中更改新版本的RAC(ReactiveCocoa)?

如何获得可观察到的UIAlertController(ReactiveCocoa或RxSwift)?

如何在Xcode 7项目中包含ReactiveCocoa 3.0

如何使用ReactiveCocoa进行两级输入信号?

如何使用ReactiveCocoa观察Swift中的属性更改

如何使用Objective-C与ReactiveCocoa中的struct绑定

根据重量获取一件物品的频率

如何从抽屉式Android隐藏一件物品

如何将一件物品正确对齐并使一件物品与Bootstrap 4对齐?

使一件物品向右浮动

信号观察者可以访问ReactiveCocoa信号的最后一个发射值吗?

ReactiveCocoa:将信号与重复信号链接在一起

当用户能够移动一件物品时,如何获取我的代码变量来更改totalMoves?

在iOS中将ReactiveCocoa与非MVVM / ReactiveCocoa结合

如何在ReactiveCocoa 5中将RACSignal转换为SignalProducer?

如何使用ReactiveCocoa / RACSignal“ RACify” UIApplicationDelegate生命周期事件,例如didFinishLaunchingWithOptions?

如何在ReactiveCocoa(Swift)中将NSError SignalProducer转换为NoError SignalProducer

如何在ReactiveCocoa 3和4中进行基本绑定

如何将ReactiveCocoa 3的“ SignalProducer <布尔,NoError>”转换为“ SignalProducer <布尔,NSError>”?

如何使用ReactiveCocoa 3实现基本的UITextField输入+ UIButton操作方案?

编译ReactiveCocoa时出错