        return v
    }

    static func get<T: Any>(base: Any, key: UnsafePointer<UInt8>) -> T? {
        return objc_getAssociatedObject(base, key) as? T
    }

    static func set<T: Any>(base: Any, key: UnsafePointer<UInt8>, value: T) {
        objc_setAssociatedObject(base, key, value, .OBJC_ASSOCIATION_RETAIN)
    }
}
