相关疑难解决方法(0)

我可以将dispatch_once_t谓词声明为成员变量而不是静态吗?

我想每个实例只运行一次代码块.

我可以将dispatch_once_t谓词声明为成员变量而不是静态变量吗?

GCD参考资料中,我不清楚.

谓词必须指向存储在全局或静态范围内的变量.使用具有自动或动态存储的谓词的结果是未定义的.

我知道我可以使用dispatch_semaphore_t和一个布尔标志来做同样的事情.我只是好奇.

objective-c grand-central-dispatch

24
推荐指数
3
解决办法
6026
查看次数

在初始化闭包时访问“self”

在 Swift 3 中,dispatch_once 函数被移除,迁移指南建议使用初始化闭包:

let myGlobal = { ... global 在对闭包的调用中包含初始化 ... }()

_ = myGlobal // 使用 myGlobal 将仅在第一次使用时调用初始化代码。

我想从初始化闭包中访问“self”实例变量,如下所示:

class SomeClass {
    var other = SomeOtherClass()
    
    let initialize: () = {
        // self.other - this doesn't work, complains about unresolved identifier 'self'
        // how to access self.other here?
    } ()

    func doSomething() {
        // initialize will only be called once
        initialize
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么在闭包中无法访问“自我”,以及如何使其成为?

swift swift3

2
推荐指数
1
解决办法
2269
查看次数