美文网首页
Swift atomic

Swift atomic

作者: 吕建雄 | 来源:发表于2020-12-23 20:20 被阅读0次

    Swift中实现类似Objective-C的atomic;

    实际上就是在其属性对应的set/get方法中添加锁即可

    Swift中实现set/get方法

    var _param: Int = 0

    var param: Int {

        set{

            _param = newValue

        }

        get{

            return _param

        }

    }

    如果要添加锁,那么可以使用如下方式:

    var _param: Int = 0

    var param: Int {

        set{

            objc_sync_enter(_sdkstate)

            _param = newValue

            objc_sync_exit(_sdkstate)

        }

        get{

            var result:Int?

            objc_sync_enter(_param)

            result = _param

            objc_sync_exit(_param)

            return result  ??  0

        }

    }

    如果每个属性都怎么添加锁的话,代码冗余量会比较大,所以可以抽取一个结构体出来,然后在需要atomic的属性直接使用即可(通过:@propertyWrapper与AtomicValue(default: 0)注解来实现 

    @propertyWrapper

    struct AtomicValue<Value> {

        private let lock: NSLock

        private var value: Value

        init(default:Value) {

            self.lock = NSLock()

            self.value = `default`

        }

        var wrappedValue: Value {

            get{

                lock.lock()

                defer{ lock.unlock() }

                return value

            }

            set{

                lock.lock()

                value = newValue

                lock.unlock()

            }

        }

    }

    在类中定义属性的时候,使用如下写法即可:

    @AtomicValue(default:0)

    private var paramInt:  Int

    @AtomicValue(default:"")

    private var paramStr:  String

    相关文章

      网友评论

          本文标题:Swift atomic

          本文链接:https://www.haomeiwen.com/subject/qgmunktx.html