@propertyWrapper final class ThreadSafe<T> { private let queue = DispatchQueue(label: "ThreadSafeTypeQueue", attributes: .concurrent) private var content: T var wrappedValue: T { get { queue.sync { content } } set { queue.async(flags: .barrier) { [weak self] in guard let self = self else { return } self.content = newValue } } } init(wrappedValue: T) { self.content = wrappedValue } }