gpt4 book ai didi

ios - 如何让RACSignal变热?

转载 作者:可可西里 更新时间:2023-11-01 04:23:30 26 4
gpt4 key购买 nike

ReactiveCocoa 可以通过调用它的-subscribeCompleted: 将信号转换为“热”信号。但我认为如果您不关心结果(即没有订阅者),这种方法会非常冗长。

RACDisposable *animationDisposable = [[self play:animation] subscribeCompleted:^{
// just to make the animation play
}];

而且这3行还不足以表达我的意图。

有没有类似目的的方法?谢谢!

最佳答案

I want to do nothing except making it hot (=make it run once).

"You keep using that word. I do not think it means what you think it means."

“热信号” 是一种无论是否有任何订阅者都会发送值(并且可能有效)的信号。 “冷信号” 是一种推迟其工作和发送任何值直到它有订阅者的信号。冷信号将执行其工作并为每个订阅者发送值。

如果你想让冷信号只运行一次但有多个订阅者,你需要多播信号。多播是一个非常简单的概念,其工作原理如下:

  1. 创建一个 RACSubject 来代理您要执行一次的信号发送的值。
  2. 根据需要多次订阅该主题。
  3. 为您只想执行一次的信号创建一个订阅,并且对于信号发送的每个值,使用 [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`.

关于ios - 如何让RACSignal变热?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22163122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com