import Combine import ObjectiveC.runtime extension NSObject { private enum AssociatedKeys { static var CancellablesKey = "CancellablesKey" } /// A set that can be used to dispose of Combine cancellables. public var cancellables: Set { get { if let cancellables = objc_getAssociatedObject(self, &NSObject.AssociatedKeys.CancellablesKey) { return cancellables as! Set } else { let cancellables: Set = [] objc_setAssociatedObject(self, &NSObject.AssociatedKeys.CancellablesKey, cancellables, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) return cancellables } } set { objc_setAssociatedObject(self, &NSObject.AssociatedKeys.CancellablesKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } }