diff --git a/Source/Charts/Data/Implementations/Standard/ChartDataSet.swift b/Source/Charts/Data/Implementations/Standard/ChartDataSet.swift index 716008fdd7..647c4bddf4 100644 --- a/Source/Charts/Data/Implementations/Standard/ChartDataSet.swift +++ b/Source/Charts/Data/Implementations/Standard/ChartDataSet.swift @@ -58,11 +58,19 @@ open class ChartDataSet: ChartBaseDataSet /// - note: Calls `notifyDataSetChanged()` after setting a new value. /// - returns: The array of y-values that this DataSet represents. /// the entries that this dataset represents / holds together - @objc open var values: [ChartDataEntry] { - didSet { + @objc open var values: [ChartDataEntry] + { + didSet + { + if isIndirectValuesCall { + isIndirectValuesCall = false + return + } notifyDataSetChanged() } } + // TODO: Temporary fix for performance. Will be removed in 4.0 + private var isIndirectValuesCall = false /// maximum y-value in the value array internal var _yMax: Double = -Double.greatestFiniteMagnitude @@ -386,7 +394,8 @@ open class ChartDataSet: ChartBaseDataSet open override func addEntry(_ e: ChartDataEntry) -> Bool { calcMinMax(entry: e) - + + isIndirectValuesCall = true values.append(e) return true @@ -401,6 +410,7 @@ open class ChartDataSet: ChartBaseDataSet { calcMinMax(entry: e) + isIndirectValuesCall = true if values.count > 0 && values.last!.x > e.x { var closestIndex = entryIndex(x: e.x, closestToY: e.y, rounding: .up) @@ -425,7 +435,8 @@ open class ChartDataSet: ChartBaseDataSet open override func removeEntry(_ entry: ChartDataEntry) -> Bool { var removed = false - + isIndirectValuesCall = true + for i in 0 ..< values.count { if values[i] === entry @@ -436,6 +447,8 @@ open class ChartDataSet: ChartBaseDataSet } } + notifyDataSetChanged() + return removed }