我只想讓它變熱(=讓它運行一次)。
"You keep using that word. I do not think it means what you think it means."
甲「熱信號」是不管發送值(可能不工作)的是否有任何訂戶的信號。 A 「冷信號」是一種信號,它推遲其工作併發送任何值直到它有用戶。並且冷信號將執行其工作並且發送每個訂戶的值。
如果您想讓冷信號只運行一次但擁有多個用戶,您需要多播的信號。多播是一個非常簡單的概念,其工作原理如下:
- 創建一個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`.
這真的取決於你最終如何使用它。你關心結果嗎? – joshaber
我只想讓它變熱(=讓它運行一次)。我想要更有表現力的東西。上面的實現是模糊的。新的程序員可能會認爲它被錯誤地調用並刪除它。 – HKTonyLee