Swift 类中的Helper类实现协议

Swift 类中的Helper类实现协议,swift,Swift,我有数据 protocol ChartData { var dataHelper: DataHelper { get set } var chartValues: [ChartValues] { get set } } 类实现该协议 class SalesChartData: ChartData { var dataHelper: DataHelper var chartValues: [ChartValues] = [] init() {

我有数据

protocol ChartData {
    var dataHelper: DataHelper { get set }
    var chartValues: [ChartValues] { get set }
}
类实现该协议

class SalesChartData: ChartData {
     var dataHelper: DataHelper
     var chartValues: [ChartValues] = []

     init() {
         dataHelper = DataHelper(data: ??? how to pass SalesChartData here ???)
     }
}
和助手类:

class DataHelper {

    var data: ChartData

    init(data: ChartData) {
        self.data = data
    }

    // use ChartData data.chartValues for example...
}
问题是如何将
SalesChartData
传递给
DataHelper
(传递“self”不起作用)?我需要在实现
ChartData
协议的每个类中访问
DataHelper
。我做错了吗?它应该如何构建?我想在
DataHelper
中过滤传递的数据
chartValues
。感谢你的任何想法

//编辑:

我做了一些类似的事情,但这种结构并不优雅。如何改进

init() {
    dataHelper = DataHelper()
    dataHelper.setData(data: self)
}

尝试使用“懒惰”:

class SalesChartData: ChartData {
     lazy var dataHelper: DataHelper = DataHelper(data: self)
     var chartValues: [ChartValues] = []
}

你的逻辑似乎有缺陷。你有一个协议,它有一个变量,这个变量又是一个类型,这个类型又有一个相同协议的变量。这看起来类似于在setter中设置变量值时遇到的问题。无限循环因为在第一阶段初始化swift对象时不能触摸
self
,所以您不能做您想做的事情,但是如果您在协议中将
dataHelper
设为可选,您将能够
dataHelper=dataHelper(self)
。我还看到,这里将有retain循环,为了避免它,需要在
DataHelper
中对
data
进行弱引用。但要使
数据
DataHelper
中变为
,您的协议应继承自
协议图表数据:类