Skip to content

Instantly share code, notes, and snippets.

@pavankataria
Created September 29, 2017 13:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pavankataria/660708a6939d0ad3a8bf44ceae4e3eaa to your computer and use it in GitHub Desktop.
Save pavankataria/660708a6939d0ad3a8bf44ceae4e3eaa to your computer and use it in GitHub Desktop.
A protocol for automatically adding a dispose bag to any object that requires it. Uses associated objects.
//
// HasDisposeBag.swift
//
// Created by Pavan Kataria 26/09/2017
// Copyright © 2017 Pavan Kataria. All rights reserved.
protocol HasDisposeBag {
var disposeBag: DisposeBag { get }
}
private struct AssociatedKeys {
static var disposeBag = "pk_disposeBag"
}
extension HasDisposeBag {
var disposeBag: DisposeBag {
get {
if let disposeBag = objc_getAssociatedObject(self, &AssociatedKeys.disposeBag) as? DisposeBag {
return disposeBag
}
objc_setAssociatedObject(self, &AssociatedKeys.disposeBag, DisposeBag(), .OBJC_ASSOCIATION_RETAIN)
return self.disposeBag
}
set {
objc_setAssociatedObject(self, &AssociatedKeys.disposeBag, newValue, .OBJC_ASSOCIATION_RETAIN)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment