Open
Description
Very useful to associate any type of object: structs/enums
currently associatedObject allows to associate just AnyObject instances
private class Box<T> {
let unbox: T
init(_ value: T) {
self.unbox = value
}
}
extension NSObject {
public final func associatedObject<T>(key key: UnsafePointer<()>, @noescape initial: () -> T) -> T {
if let boxedObject = objc_getAssociatedObject(self, key) as? Box<T> {
return boxedObject.unbox
}
let object = initial()
objc_setAssociatedObject(self, key, Box(object), .OBJC_ASSOCIATION_RETAIN)
return object
}
}
Metadata
Metadata
Assignees
Labels
No labels