相关疑难解决方法(0)

在Swift的Dispatch闭包中修改struct实例变量

我正在使用DEVELOPMENT-SNAPSHOT-2016-06-06-aSwift 的版本.我似乎无法绕过这个问题,我已尝试@noescape在各个地方使用,但我仍然有以下错误:

闭包不能隐式捕获变异的自身参数

为了更好地解释,这是一个简单的例子:

public struct ExampleStruct {
  let connectQueue = dispatch_queue_create("connectQueue", nil)
  var test = 10

  mutating func example() {
    if let connectQueue = self.connectQueue {
      dispatch_sync(connectQueue) {
        self.test = 20 // error happens here
      }
     }
   }
 }
Run Code Online (Sandbox Code Playgroud)

这些Swift二进制文件中的某些东西必须已经改变,现在导致我以前工作的代码中断了.我想避免的一种解决方法是使我的结构体成为一个类,这有助于解决问题.如果还有其他方法,请告诉我.

struct grand-central-dispatch swift

11
推荐指数
1
解决办法
4538
查看次数

转义闭包中的结构到底是如何被捕获的?

对我来说,转义闭包将通过复制捕获结构似乎是合乎逻辑的。但如果是这种情况,下面的代码就没有意义,不应该编译:

struct Wtf {
    var x = 1
}

func foo(){
    
    var wtf = Wtf()
    
    DispatchQueue.global().async {
        wtf.x = 5
    }
    
    Thread.sleep(forTimeInterval: 2)
    print("x = \(wtf.x)")
}
Run Code Online (Sandbox Code Playgroud)

然而它编译成功,甚至在调用 foo 时打印 5。这怎么可能?

struct closures swift

4
推荐指数
1
解决办法
854
查看次数

标签 统计

struct ×2

swift ×2

closures ×1

grand-central-dispatch ×1