73637


CombineにRxSwiftのDisposeBagのような機能のものはありますか？

下記のようなコードだと、Future呼び出しごとに `AnyCancellable`の変数を用意しないといけません。

[code]

    import Foundation
    import Combine
    
    class Hoge {
        private var cancellable1: AnyCancellable?
        private var cancellable2: AnyCancellable?
        
        func foo() {
            self.cancellable1 = createFuture().sink(
                receiveValue: { v in
                    print(v)
                }
            )
            self.cancellable2 = createFuture().sink(
                receiveValue: { v in
                    print(v)
                }
            )
        }
        
        private func createFuture() -> Future<Int, Never> {
          return Future { promise in
            DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
                promise(.success(10))
            }
          }
        }
    }
    
[/code]


CC BY-SA 4.0
2021-01-28T07:38:14.043
73636
2021-01-28T07:38:14.043
9008
question
swift rx-swift combine
CombineにRxSwiftのDisposeBagのような機能のものはありますか？


[store(in:)](https://developer.apple.com/documentation/combine/anycancellable/store\(in:\)-6cr9i)が使えます。  
`store(in:)`に与える `Set<AnyCancellable>` も用意しましょう。  
（この `Set<AnyCancellable>`が`DisposeBag`のようなものに当たります）

下記のコードのように使います。

[code]

    import Foundation
    import Combine
    
    class Hoge {
        private var cancellables = Set<AnyCancellable>()
        
        func foo() {
            self.createFuture().sink(
                receiveValue: { v in
                    print(v)
                }
            ).store(in: &self.cancellables)
            self.createFuture().sink(
                receiveValue: { v in
                    print(v)
                }
            ).store(in: &self.cancellables)
    
        }
        
        private func createFuture() -> Future<Int, Never> {
          return Future { promise in
            DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
                promise(.success(10))
            }
          }
        }
    }
    
[/code]


CC BY-SA 4.0
2021-01-28T07:38:14.043
73637
2021-01-28T07:38:14.043
9008
73636
answer