Skip to content

Instantly share code, notes, and snippets.

@FranDepascuali
Last active January 28, 2016 00:04
Show Gist options
  • Save FranDepascuali/34ade491bff6b6f92314 to your computer and use it in GitHub Desktop.
Save FranDepascuali/34ade491bff6b6f92314 to your computer and use it in GitHub Desktop.
private var AssociatedKey: UInt = 1
private final class AssociatedObjectBox<T> {
let value: T
init(_ x: T) {
value = x
}
}
private func lift<T>(x: T) -> AssociatedObjectBox<T> {
return AssociatedObjectBox(x)
}
private func setAssociatedObject<T>(object: AnyObject, value: T, key: UnsafePointer<Void>, policy: objc_AssociationPolicy) {
if let v: AnyObject = value as? AnyObject {
objc_setAssociatedObject(object, key, v, policy)
} else {
objc_setAssociatedObject(object, key, lift(value), policy)
}
}
private func getAssociatedObject<T>(object: AnyObject, key: UnsafePointer<Void>) -> T? {
if let v = objc_getAssociatedObject(object, key) as? T {
return v
} else if let v = objc_getAssociatedObject(object, key) as? AssociatedObjectBox<T> {
return v.value
} else {
return nil
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment