【发布时间】:2020-05-31 19:07:26
【问题描述】:
这是一个玩具示例,但它完全减少了我所处的情况:
class MyDataSource: UITableViewDiffableDataSource<String,String> {
var string : String?
init(string:String?) {
self.string = string
super.init(tableView: UITableView()) { (_, _, _) -> UITableViewCell? in
print(self.string) // error
return nil
}
}
}
我正在尝试使我的表视图数据源自包含,而我这样做的方式(到目前为止)是将 UITableViewDiffableDataSource 子类化。这很好用,除非我尝试给我的子类一个自定义初始化程序。玩具示例显示了问题。
我想要填充单元格的方式绝对取决于一个值,该值可以在数据源生命周期的后期发生变化。因此,它不能硬编码到单元提供程序函数中。我不能在这里简单地引用string,这是在初始化程序中传递的值;我必须引用self.string,因为稍后其他代码将有权更改此数据源的string 实例属性,并且我希望单元提供程序在发生这种情况时使用该新值。
但是,我收到错误“在所有成员初始化之前由闭包自我捕获”。这似乎不公平。我确实在调用super.init 之前初始化了我的string 实例属性。因此,它在可能调用单元格提供程序方法的最早时刻确实具有价值。
【问题讨论】:
-
This 看起来相关。
-
@MartinR 当然,我发现了很多关于此错误消息的问题,但它们不适用于我的情况(即没有我可以使用的解决方案)。
标签: ios swift uitableview diffabledatasource