

RxSwiftのBehaviorRelayを使って `share(replay: 1)` しているコードを見かけることがあります。

[code]

    let relay = RxCocoa.BehaviorRelay<String>(value: "")
    var observable: RxSwift.Observable<String> {
        return relay
            .observeOn(MainScheduler.instance)
            .share(replay: 1)
            // ↑ここ
    }
    
[/code]

BehaviorRelayはsubscribe時に現在値を返すと思うのですが、 `share(replay: 1)` を書く意味って何なのでしょうか？

**参考**  
[【RxSwift】BehaviorRelayとPublishRelayについてまとめてみた](https://egg-is-
world.com/2018/08/11/rxswift-behaviorrelay-publishrelay/)


CC BY-SA 4.0
2020-05-02T02:21:47.623
66192
2020-09-08T21:25:07.887
2020-05-02T10:57:09.910
3060
39936
question
swift ios rx-swift
BehaviorRelayでshare(replay: 1)をする意味


(一個人の経験ですが、)ここ数年ずっとRx使っているプロジェクトにいますが、BehaviorRelayに.share(replay:
1)を付けているコードは見たことありませんね

.share(replay:1)は(基本的に)hot変換するために使う物ですが、そもそも直前のBehaviorRelayがhotなので意味ないです。。。

ただコメントにもある通り、もし

[code]

    var observable: RxSwift.Observable<String> {
        return relay
            .map { $0.uppercased() }
            .share(replay: 1)
    
[/code]

みたいに直前にcoldに変換するオペレーターがついていたら、例え1回しか購読しないとしても、今後のことを考えると意味あると思います！


CC BY-SA 4.0
2020-09-08T19:04:22.027
70237
2020-09-08T21:25:07.887
2020-09-08T21:25:07.887
41824
41824
66192
answer