1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| protocol AssociatedObjectOwner: AnyObject { func getAssociatedObject<T>(key: UnsafeRawPointer, initialObject: @autoclosure () -> T) -> T func setAssociatedObject<T>(key: UnsafeRawPointer, object: T?) }
extension AssociatedObjectOwner {
func getAssociatedObject<T>(key: UnsafeRawPointer, initialObject: @autoclosure () -> T) -> T { if let object = objc_getAssociatedObject(self, key) as? T { return object } let object = initialObject() objc_setAssociatedObject(self, key, object, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) return object }
func setAssociatedObject<T>(key: UnsafeRawPointer, object: T?) { objc_setAssociatedObject(self, key, object, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) }
}
|