diff --git a/Source/Charts/Data/Implementations/ChartBaseDataSet.swift b/Source/Charts/Data/Implementations/ChartBaseDataSet.swift index c8d9bb96a4..190241efa3 100644 --- a/Source/Charts/Data/Implementations/ChartBaseDataSet.swift +++ b/Source/Charts/Data/Implementations/ChartBaseDataSet.swift @@ -270,7 +270,7 @@ open class ChartBaseDataSet: NSObject, ChartDataSetProtocol open var isHighlightEnabled: Bool { return highlightEnabled } /// Custom formatter that is used instead of the auto-formatter if set - open lazy var valueFormatter: ValueFormatter = ChartUtils.defaultValueFormatter() + open lazy var valueFormatter: ValueFormatter = DefaultValueFormatter() /// Sets/get a single color for value text. /// Setting the color clears the colors array and adds a single color. diff --git a/Source/Charts/Formatters/DefaultValueFormatter.swift b/Source/Charts/Formatters/DefaultValueFormatter.swift index 6c3fdbc9da..8affc862a0 100644 --- a/Source/Charts/Formatters/DefaultValueFormatter.swift +++ b/Source/Charts/Formatters/DefaultValueFormatter.swift @@ -11,6 +11,7 @@ import Foundation +/// The default value formatter used for all chart components that needs a default @objc(ChartDefaultValueFormatter) open class DefaultValueFormatter: NSObject, ValueFormatter { @@ -22,69 +23,65 @@ open class DefaultValueFormatter: NSObject, ValueFormatter @objc open var block: Block? - @objc open var hasAutoDecimals: Bool = false + @objc open var hasAutoDecimals: Bool - private var _formatter: NumberFormatter? - @objc open var formatter: NumberFormatter? - { - get { return _formatter } - set - { + @objc open var formatter: NumberFormatter? { + willSet { hasAutoDecimals = false - _formatter = newValue } } - private var _decimals: Int? - open var decimals: Int? - { - get { return _decimals } - set - { - _decimals = newValue - - if let digits = newValue + open var decimals: Int? { + didSet { + if let digits = decimals { - self.formatter?.minimumFractionDigits = digits - self.formatter?.maximumFractionDigits = digits - self.formatter?.usesGroupingSeparator = true + formatter?.minimumFractionDigits = digits + formatter?.maximumFractionDigits = digits + formatter?.usesGroupingSeparator = true } } } public override init() { - super.init() - - self.formatter = NumberFormatter() + formatter = NumberFormatter() + formatter?.usesGroupingSeparator = true + decimals = 1 hasAutoDecimals = true + + super.init() } @objc public init(formatter: NumberFormatter) { - super.init() - self.formatter = formatter + hasAutoDecimals = false + + super.init() } @objc public init(decimals: Int) { - super.init() - - self.formatter = NumberFormatter() - self.formatter?.usesGroupingSeparator = true + formatter = NumberFormatter() + formatter?.usesGroupingSeparator = true self.decimals = decimals hasAutoDecimals = true + + super.init() } @objc public init(block: @escaping Block) { - super.init() - self.block = block + hasAutoDecimals = false + + super.init() } - - @objc public static func with(block: @escaping Block) -> DefaultValueFormatter? + + /// This function is deprecated - Use `init(block:)` instead. + // DEC 11, 2017 + @available(*, deprecated: 3.0, message: "Use `init(block:)` instead.") + @objc public static func with(block: @escaping Block) -> DefaultValueFormatter { return DefaultValueFormatter(block: block) } diff --git a/Source/Charts/Utils/ChartUtils.swift b/Source/Charts/Utils/ChartUtils.swift index b8cb16667d..df819c3619 100644 --- a/Source/Charts/Utils/ChartUtils.swift +++ b/Source/Charts/Utils/ChartUtils.swift @@ -76,7 +76,7 @@ extension Double self != 0.0 else { return 0 } - let i = self.roundedToNextSignificant() + let i = roundedToNextSignificant() guard !i.isInfinite, @@ -97,23 +97,6 @@ extension CGPoint } } -open class ChartUtils -{ - private static var _defaultValueFormatter: ValueFormatter = generateDefaultValueFormatter() - - private class func generateDefaultValueFormatter() -> ValueFormatter - { - let formatter = DefaultValueFormatter(decimals: 1) - return formatter - } - - /// - returns: The default value formatter used for all chart components that needs a default - open class func defaultValueFormatter() -> ValueFormatter - { - return _defaultValueFormatter - } -} - extension CGContext { open func drawImage(_ image: NSUIImage, atCenter center: CGPoint, size: CGSize) @@ -226,7 +209,7 @@ extension CGContext { NSUIGraphicsPopContext() } - internal func drawMultilineText(_ text: String, at point: CGPoint, constrainedTo size: CGSize, anchor: CGPoint, knownTextSize: CGSize, angleRadians: CGFloat, attributes: [NSAttributedStringKey : Any]?) + func drawMultilineText(_ text: String, at point: CGPoint, constrainedTo size: CGSize, anchor: CGPoint, knownTextSize: CGSize, angleRadians: CGFloat, attributes: [NSAttributedStringKey : Any]?) { var rect = CGRect(origin: .zero, size: knownTextSize) @@ -274,7 +257,7 @@ extension CGContext { NSUIGraphicsPopContext() } - internal func drawMultilineText(_ text: String, at point: CGPoint, constrainedTo size: CGSize, anchor: CGPoint, angleRadians: CGFloat, attributes: [NSAttributedStringKey : Any]?) + func drawMultilineText(_ text: String, at point: CGPoint, constrainedTo size: CGSize, anchor: CGPoint, angleRadians: CGFloat, attributes: [NSAttributedStringKey : Any]?) { let rect = text.boundingRect(with: size, options: .usesLineFragmentOrigin, attributes: attributes, context: nil) drawMultilineText(text, at: point, constrainedTo: size, anchor: anchor, knownTextSize: rect.size, angleRadians: angleRadians, attributes: attributes)