小编You*_*mza的帖子

原子属性包装器仅在声明为类时才有效,而不是结构体

我在 Swift 中创建了一个“锁”,并为我的 Swift 类创建了一个使用该锁的 Atomic 属性包装器,因为 Swift 缺少 ObjC 的atomic属性属性。

当我在启用线程清理器的情况下运行我的测试时,它总是捕获使用我的 Atomic 属性包装器的属性上的数据竞争。

唯一有效的是将属性包装器的声明更改为一个类而不是一个结构体,这里的主要问题是:为什么它有效!

print在属性包装器中添加了s 并添加了 lockinit来跟踪创建的对象数量,它与 struct/class 相同,尝试在另一个项目中重现该问题,但也没有用。但是我会添加与问题类似的文件,并让我知道它为什么起作用的任何猜测

public class SwiftLock {

    init() { }

   public func sync<R>(execute: () throws -> R) rethrows -> R {
    objc_sync_enter(self)
    defer { objc_sync_exit(self) }
    return try execute()
    }
}
Run Code Online (Sandbox Code Playgroud)

原子属性包装器

@propertyWrapper struct Atomic<Value> {
    let lock: SwiftLock
    var value: Value

    init(wrappedValue: Value, lock: SwiftLock=SwiftLock()) {
        self.value = wrappedValue
        self.lock = …
Run Code Online (Sandbox Code Playgroud)

ios swift ios-multithreading swift-structs property-wrapper

8
推荐指数
1
解决办法
280
查看次数

如何检查反应原生的项目版本?

我正在编写一个react-native组件,我使用的是事件,但是当我发送事件时,我的本机模块不会构建在旧版本的反应上 bridge.eventDispatcher..

那么有没有办法检查版本在react和react-native模块实现之间切换?谢谢.

react-native

3
推荐指数
2
解决办法
4809
查看次数