在接下来的 0.5 秒延迟期间,tableViewManager 可能会被释放。我想确保在嵌套闭包内与 textView 交互时 textView 是弱的。我该怎么做?
tableViewManager.textViewDidBeginEditing = { [weak self] textView, indexPath in
asyncAfter(seconds: 0.5) {
let value = textView.tag // touched here
self?.tableView.scrollToRow(at: indexPath, at: .top, animated: true)
}
}
编辑:请停止提供有关如何让自己变得虚弱的答案。这个问题不是在问“ self ”。 TextView 。 teeeeexttt viiieeewww。
最佳答案
您可以使用常规语法:
tableViewManager.textViewDidBeginEditing = { [weak self] textView, indexPath in
// textView is strong here
asyncAfter(seconds: 0.5) { [weak textView] in
// textView is weak here
let value = textView?.tag // touched here
self?.tableView.scrollToRow(at: indexPath, at: .top, animated: true)
}
}
编辑:
尝试使用容器来避免编译器错误:
class WeakLink<T: AnyObject> {
weak var value: T?
init(_ value: T) {
self.value = value
}
}
tableViewManager.textViewDidBeginEditing = { [weak self] textView, indexPath in
let weakTextView = WeakLink(textView)
asyncAfter(seconds: 0.5) {
// textView is weak here
let textView = weakTextView.value
let value = textView?.tag // touched here
self?.tableView.scrollToRow(at: indexPath, at: .top, animated: true)
}
}
关于ios - 在嵌套闭包中声明 weak,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54309569/