以下swift代码是什么意思?

vij*_*esh 0 closures weak-references ios swift

谁能告诉我为什么我们使用guard let self = self

我在阅读GCD时已经看过这段代码,我无法弄清楚那条特定的线路是做什么的.

DispatchQueue.global(qos: .userInitiated).async { [weak self] in
    guard let self = self else {
        return
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

Lor*_*eto 5

首先,您要创建一个将异步执行的块

DispatchQueue.global(qos: .userInitiated).async
Run Code Online (Sandbox Code Playgroud)

然后在块内部,代码检查是否self仍然分配了调用此函数的对象

guard let self = self else {
  return
}
Run Code Online (Sandbox Code Playgroud)

我们需要检查这一点,因为self被声明为weak块内部以避免保留周期(Swift闭包导致自我强保留周期)并且可以在块执行之前释放.该行代码检查self是否为!= nil,并将其分配给self,否则返回.