// // Atomic.swift // Broadcast Extension // // Created by Maksym Shcheglov. // https://www.onswiftwings.com/posts/atomic-property-wrapper/ // import Foundation @propertyWrapper struct Atomic { private var value: Value private let lock = NSLock() init(wrappedValue value: Value) { self.value = value } var wrappedValue: Value { get { load() } set { store(newValue: newValue) } } func load() -> Value { lock.lock() defer { lock.unlock() } return value } mutating func store(newValue: Value) { lock.lock() defer { lock.unlock() } value = newValue } }