blob: 6fc860dbf31a228cad61374a332d03ce9f26aeb0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
//
// AssociatedValue.swift
// MullvadVPN
//
// Created by pronebird on 06/07/2020.
// Copyright © 2020 Mullvad VPN AB. All rights reserved.
//
import Foundation
/// A container type for storing associated values
final class AssociatedValue<T>: NSObject {
let value: T
init(_ value: T) {
self.value = value
}
class func get(object: Any, key: UnsafeRawPointer) -> T? {
let container = objc_getAssociatedObject(object, key) as? AssociatedValue<T>
return container?.value
}
class func set(object: Any, key: UnsafeRawPointer, value: T?) {
objc_setAssociatedObject(
object,
key,
value.flatMap { AssociatedValue($0) },
.OBJC_ASSOCIATION_RETAIN_NONATOMIC
)
}
}
|