我是Swift的新手,我正在尝试子类化如下:
public class CombinedChartRenderer: ChartDataRendererBase {
private weak var _chart: CombinedChartView!
public init(chart: CombinedChartView, animator: ChartAnimator, viewPortHandler: ChartViewPortHandler)
{
super.init(animator: animator, viewPortHandler: viewPortHandler)
_chart = chart
createRenderers()
}
}
public class MyCombinedChartRenderer: CombinedChartRenderer {
private weak var _chart: MyCombinedChartView!
public override init(chart: MyCombinedChartView, animator: ChartAnimator, viewPortHandler: ChartViewPortHandler)
{
super.init(chart: chart, animator: animator, viewPortHandler: viewPortHandler)
_chart = chart
}
}
总是说
Overriding method with selector 'initWithChart:animator:viewPortHandler:' has incompatible type '(MyCombinedChartView, ChartAnimator, ChartViewPortHandler) -> MyCombinedChartRenderer'
我不确定它有什么问题。我看到其他代码可以通过提供更专业的子类来完成这样的初始化。
CombinedChartView就像:
public class CombinedChartView: BarLineChartViewBase
{
...
}
public class MyCombinedChartView: CombinedChartView
{
// do some customization and override
}
答案 0 :(得分:0)
只需更改一些变量名称,冲突并使用init删除该覆盖关键字;
public class CombinedChartRenderer: ChartDataRendererBase {
private weak var _chart: CombinedChartView!
public init(chart: CombinedChartView, animator: ChartAnimator, viewPortHandler: ChartViewPortHandler)
{
super.init(animator: animator, viewPortHandler: viewPortHandler)
_chart = chart
createRenderers()
}
}
public class MyCombinedChartRenderer: CombinedChartRenderer {
private weak var _myChart: MyCombinedChartView!
public init(myChart: MyCombinedChartView, animator: ChartAnimator, viewPortHandler: ChartViewPortHandler)
{
super.init(chart: myChart, animator: animator, viewPortHandler: viewPortHandler)
_myChart = myChart // This can be removed by marking baseclass instance '_chart' as public;
}
}