我需要在闭包中使用self的弱引用。为此,我使用以下代码:
func testFunction() {
self.apiClient.getProducts(onCompletion: { [weak self] (error, searchResult) in
self?.isSearching = false
}
}
在闭包的捕获列表中给出弱引用的方式,能否在testFunction的主体中声明self的弱引用呢。
func testFunction() {
weak var weakSelf = self
self.apiClient.getProducts(onCompletion: {(error, searchResult) in
weakSelf?.isSearching = false
}
}
类似地,Objective-C中也使用了相似的语法,在块内使用弱引用。
__weak typeof(self) weakSelf = self;
在闭包中通过捕获列表指定弱引用是否比在函数体中声明一个弱变量有优势呢? 如果函数体中有多个闭包,那么在函数体中声明一个弱变量并在所有闭包中使用相同的变量,比在每个闭包中都写成一个捕获列表更加明智。