19.UniRx专题(Subject主题)

本文详细介绍了UniRx中的Subject类型,包括AsyncSubject、BehaviorSubject、PublishSubject和ReplaySubject。AsyncSubject只在源Observable完成时发出最后一个值;BehaviorSubject在订阅时发出最近的值或种子数据;PublishSubject不存储历史值,只实时传递;ReplaySubject则会重播所有源Observable发出的项目,无论观察者何时订阅。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Subject 定义和解析
AsyncSubject 异步主题
BehaviorSubject 行为主题
PublishSubject 解体主题
ReplaySubject 重播主题


Subject 定义和解析

主题是一种在ReactiveX的某些实现中可用的桥梁或代理,它既充当观察者又充当Observable。
因为它是观察者,所以可以订阅一个或多个Observable,并且因为它是Observable,
所以可以通过释放它们来观察它所观察的项,还发出新的项。

因为一个主体订阅了一个Observable,它将触发Observable开始发出项目(如果Observable是“冷”的,也就是说,
如果它在开始发出项目之前等待订阅)。 这可以使最终的主题成为原始“冷”可观察对象的“热”可观察变量。

Thinking in words
Subject一般用于bridge或proxy,其实它什么都可以,特殊情况下作为bridge或proxy来使用;
Subject比较特殊,既可以当作Observer,又可以当作Observable,观察者是实体观察对象,
观察者必须要有Observable的来配对,那么Subject怎么进行工作的呢?
输出条件:必须要有订阅者,指定观察变量
其中,无论主题是cold还是hot,在订阅之前统统当作cold来处理,订阅之后统统当作hot来通知

输出结果
在这里插入图片描述
代码示例

public class No19_Subject : MonoBehaviour
{
   

    void Start()
    {
   
        Subject<int> subject = new Subject<int>();

        // Subject作为Observable
        var take = subject.DelayFrame(100).Select(_ => 100);
        take.Subscribe(value => Debug.LogFormat("Take: {0}", value));

        // Subject作为Observer
        subject.Subscribe(Next, Error, Complete);
        subject.OnNext(66);
    }

    void Next(int value)
    {
   
        Debug.LogFormat("Next: {0}", value);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值