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
中变为弱
,您的协议应继承自类
:协议图表数据:类