// // Copyright 2021-2024 New Vector Ltd. // // SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial // Please see LICENSE files in the repository root for full details. // import Combine import Foundation extension Publisher where Failure == Never { /// Same as `assign(to:on:)` but maintains a weak reference to object /// /// Useful in cases where you want to pass self and not cause a retain cycle. func weakAssign(to keyPath: ReferenceWritableKeyPath, on object: T) -> AnyCancellable { sink { [weak object] value in object?[keyPath: keyPath] = value } } }