Are Swift variables atomic?

前端 未结 6 1273
隐瞒了意图╮
隐瞒了意图╮ 2020-11-28 04:19

In Objective-C you have a distinction between atomic and nonatomic properties:

@property (nonatomic, strong) NSObject *nonatomicObject;
@property (atomic, st         


        
6条回答
  •  孤独总比滥情好
    2020-11-28 04:54

    From Swift 5.1 you can use property wrappers to make specific logic for your properties. This is atomic wrapper implementation:

    @propertyWrapper
    struct atomic {
        private var value: T
        private let lock = NSLock()
    
        init(wrappedValue value: T) {
            self.value = value
        }
    
        var wrappedValue: T {
          get { getValue() }
          set { setValue(newValue: newValue) }
        }
    
        func getValue() -> T {
            lock.lock()
            defer { lock.unlock() }
    
            return value
        }
    
        mutating func setValue(newValue: T) {
            lock.lock()
            defer { lock.unlock() }
    
            value = newValue
        }
    }
    

    How to use:

    class Shared {
        @atomic var value: Int
    ...
    }
    

提交回复
热议问题