使用weak self并在执行闭包前进行非可选值绑定
示例代码:
class ExampleClass { var num = 0
func exampleFunc(completion: @escaping ()->Void) {
DispatchQueue.main.async {
self.num = 1
completion()
}
}
}
// 闭包逃逸捕捉可变的“self”参数 class AnotherClass { var exampleObj = ExampleClass()
func anotherFunc() {
exampleObj.exampleFunc {
self.exampleObj.num = 2 // 报错:Escaping closure captures mutating 'self' parameter
}
}
}
// 使用weak self并在执行闭包前进行非可选值绑定 class FixedClass { var exampleObj = ExampleClass()
func fixedFunc() {
exampleObj.exampleFunc { [weak self] in
guard let self = self else { return }
self.exampleObj.num = 2
}
}
}