如何使用“unowned self”或“weak self”来捕获“self”参数来避免错误Escaping closure captures mutating 'self' parameter
时间: 2023-11-16 13:05:50 浏览: 178
我们可以在闭包中使用"unowned self"或"weak self"来捕获"self"参数来避免错误。如果我们使用"unowned self",我们假设该属性不会被销毁,否则会崩溃。而如果我们使用"weak self",我们需要在使用前检查属性是否为nil。这样既可以避免崩溃,又不会造成内存泄漏。具体实现可以参考以下代码示例:
```
class MyClass {
func myFunction(completion: @escaping () -> Void) {
DispatchQueue.main.async { [unowned self] in
// 在闭包中使用unowned self来避免错误
self.myProperty = "new value"
completion()
}
}
}
```
```
class MyClass {
func myFunction(completion: @escaping () -> Void) {
DispatchQueue.main.async { [weak self] in
// 在闭包中使用weak self来避免错误
guard let strongSelf = self else {
return
}
strongSelf.myProperty = "new value"
completion()
}
}
}
```
阅读全文