在所有成员都初始化之前被闭包捕获,但是我确实初始化了它们

问题描述 投票:0回答:1

这是一个玩具示例,但它完全减少了我所处的情况:

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实例属性,并且我希望单元格提供程序在发生这种情况时使用该新值。

但是,我收到错误消息“初始化所有成员之前,闭包自身捕获了该错误”。那似乎不公平。我did在调用string之前初始化我的super.init实例属性。因此,它在最早可以调用像元提供者方法时确实具有一个值。

ios swift uitableview diffabledatasource
1个回答
0
投票

您可以通过tableView.datasource访问self,它将解决大多数问题。

© www.soinside.com 2019 - 2024. All rights reserved.