mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-08-08 08:31:13 +00:00
32 lines
753 B
Swift
32 lines
753 B
Swift
import Foundation
|
|
|
|
public final class QueueLocalObject<T: AnyObject> {
|
|
private let queue: Queue
|
|
private var valueRef: Unmanaged<T>?
|
|
|
|
public init(queue: Queue, generate: @escaping () -> T) {
|
|
self.queue = queue
|
|
|
|
self.queue.async {
|
|
let value = generate()
|
|
self.valueRef = Unmanaged.passRetained(value)
|
|
}
|
|
}
|
|
|
|
deinit {
|
|
let valueRef = self.valueRef
|
|
self.queue.async {
|
|
valueRef?.release()
|
|
}
|
|
}
|
|
|
|
public func with(_ f: @escaping (T) -> Void) {
|
|
self.queue.async {
|
|
if let valueRef = self.valueRef {
|
|
let value = valueRef.takeUnretainedValue()
|
|
f(value)
|
|
}
|
|
}
|
|
}
|
|
}
|