MobiusCore/Source/Disposables/CompositeDisposable.swift (20 lines of code) (raw):
// Copyright Spotify AB.
// SPDX-License-Identifier: Apache-2.0
import Foundation
/// A CompositeDisposable holds onto the provided disposables and disposes all of them once its `dispose` method is
/// called.
public final class CompositeDisposable {
private var disposables: [Disposable]
private let lock = DispatchQueue(label: "Mobius.CompositeDisposable")
/// Initializes a `CompositeDisposable`.
///
/// - Parameter disposables: an array of disposables.
init(disposables: [Disposable]) {
self.disposables = disposables
}
}
extension CompositeDisposable: MobiusCore.Disposable {
/// Dispose function disposes all of the internal disposables.
public func dispose() {
var disposables = [Disposable]()
lock.sync {
disposables = self.disposables
self.disposables.removeAll()
}
for disposable in disposables {
disposable.dispose()
}
}
}