ReactiveCocoa 可以通过调用它的方法将信号转换为“热”信号-subscribeCompleted:
。但我认为如果您不关心结果(即没有订阅者),则此方法非常冗长。
RACDisposable *animationDisposable = [[self play:animation] subscribeCompleted:^{
// just to make the animation play
}];
而这三句话并不足以表达我的意图。
有没有类似目的的方法?谢谢!
我只想让它变热(=让它运行一次)。
“你一直用这个词。我不认为它的意思是你认为的意思。”
A “热信号”是一个发送值的信号(并且可能确实有效),无论它是否有任何订阅者。 A“冷信号”是一个信号,它推迟其工作和任何值的发送,直到有订阅者为止。冷信号将执行其工作并发送值each订户。
如果您想让冷信号仅运行一次但有多个订阅者,您需要组播信号。多播是一个非常简单的概念,其工作原理如下:
- 创建一个 RACSubject 来代理您想要执行一次的信号发送的值。
- 根据需要多次订阅该主题。
- 创建对您只想执行一次的信号的单个订阅,并且对于信号发送的每个值,将其发送到主题
[subject sendNext:value]
.
但是,您可以而且应该使用RACMulticastConnection
用更少的代码完成上述所有操作:
RACMulticastConnection *connection = [signal publish];
[connection.signal subscribe:subscriberA];
[connection.signal subscribe:subscriberB];
[connection.signal subscribe:subscriberC];
[connection connect]; // This will cause the original signal to execute once.
// But each of subscriberA, subscriberB, and subscriberC
// will be sent the values from `signal`.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)