Skip to content

Instantly share code, notes, and snippets.

@efremidze
Created March 12, 2017 01:03
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 efremidze/65558326ed6553216333d1c98f91dd59 to your computer and use it in GitHub Desktop.
Save efremidze/65558326ed6553216333d1c98f91dd59 to your computer and use it in GitHub Desktop.
import Foundation
private class Associated<Type>: NSObject {
let value: Type
init(_ value: Type) {
self.value = value
}
}
protocol Associable {}
extension Associable where Self: AnyObject {
func getAssociatedObject<T>(_ key: UnsafeRawPointer) -> T? {
return (objc_getAssociatedObject(self, key) as? Associated<T>).map { $0.value }
}
func setAssociatedObject<T>(_ key: UnsafeRawPointer, _ value: T?) {
objc_setAssociatedObject(self, key, value.map { Associated<T>($0) }, .OBJC_ASSOCIATION_RETAIN)
}
}
extension NSObject: Associable {}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment