在闭包中捕获函数参数
func someFunction(tableView: UITableView) -> (() -> ()) {
return { [weak self] in
self?.someOtherFunction() {
tableView.performTask()
}
}
}
如果是这样,在上面的例子中,确保tableView参数弱的语法是什么?
答案 0 :(得分:1)
默认情况下强关闭捕获参数。在闭包的大多数常见情况下,您访问self
中声明的属性,而不捕获其他引用,因此使self
弱是足够的。在您的情况下,您需要展开闭包捕获列表并包含tableView
:
func someFunction(tableView: UITableView) -> (() -> ()) {
return { [weak self, weak tableView] in
self?.someOtherFunction() {
tableView?.performTask()
}
}
}
您可以在ARC文档中了解有关捕获列表的更多信息:
您解决了闭包和类之间的强引用循环 实例通过将捕获列表定义为闭包的一部分 定义。捕获列表定义捕获时使用的规则 封闭体内的一个或多个引用类型。与两个类实例之间的强引用循环一样,您声明每个实例 捕获的引用是一个弱的或无主的引用而不是一个 强烈的参考。