我正在尝试将tableviewcell委托函数与完成关闭块一起使用。
我担心在这种情况下何时应该使用[弱者]。
我也想知道实现这种逻辑的更好方法
该代码要做什么?
当用户点击将新项目添加到堆栈视图中
它将从远程服务器获取数据。
如果获取,则让tableviewcell添加新项目
protocol myTableViewCellSubViewDelegate {
func fetchData(cell: MyTableViewCell, completion: @escaping (Bool) -> ())
}
class MyTableViewCell: UITableViewCell {
var delegate: myTableViewCellSubViewDelegate?
var stackView = UIStackView()
func startFetchData(){
delegate?.fetchData(cell: self){ success in
if success {
self.stackView.addArrangedSubview(UIView())
}
}
}
}
查看MyTableViewCell中的startFecthData函数。
我是否应该使用[弱自我]?
在fetchData函数中,是否应该@转义?
如何使用延期?
这是MyViewController.swift
class MyViewController: UIViewController, myTableViewCellSubViewDelegate {
func doSomthing(url : URL, completion: (Error?) -> ()) {
completion(nil)
}
func fetchData(cell: MyTableViewCell, completion: @escaping (Bool) -> ()) {
doSomthing(url: URL(string: "www.stackoverflow.com")!) { error in
if error != nil {
print("Error...")
}else {
completion(true)
}
}
}
}
答案 0 :(得分:1)
您应该使用[weak self]
。这样可以避免在重新分配此单元格后发生崩溃。
func startFetchData(){
delegate?.fetchData(cell: self){ [weak self] success in
if success {
self?.stackView.addArrangedSubview(UIView())
}
}
}
使用@转义,因为您在另一个闭包中运行此闭包。
不要。