PieChartData.swift 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. //
  2. // PieData.swift
  3. // Charts
  4. //
  5. // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda
  6. // A port of MPAndroidChart for iOS
  7. // Licensed under Apache License 2.0
  8. //
  9. // https://github.com/danielgindi/Charts
  10. //
  11. import Foundation
  12. open class PieChartData: ChartData
  13. {
  14. public required init()
  15. {
  16. super.init()
  17. }
  18. public override init(dataSets: [ChartDataSetProtocol])
  19. {
  20. super.init(dataSets: dataSets)
  21. }
  22. public required init(arrayLiteral elements: ChartDataSetProtocol...)
  23. {
  24. super.init(dataSets: elements)
  25. }
  26. @objc public var dataSet: PieChartDataSetProtocol?
  27. {
  28. get
  29. {
  30. return dataSets.first as? PieChartDataSetProtocol
  31. }
  32. set
  33. {
  34. if let set = newValue
  35. {
  36. dataSets = [set]
  37. }
  38. else
  39. {
  40. dataSets = []
  41. }
  42. }
  43. }
  44. /// - returns: All up to one dataSet object this ChartData object holds.
  45. @objc open override var dataSets: [ChartDataSetProtocol]
  46. {
  47. get
  48. {
  49. assert(super.dataSets.count <= 1, "Found multiple data sets while pie chart only allows one")
  50. return super.dataSets
  51. }
  52. set
  53. {
  54. super.dataSets = newValue
  55. }
  56. }
  57. open override func dataSet(at index: ChartData.Index) -> ChartData.Element?
  58. {
  59. guard index == 0 else { return nil }
  60. return self[index]
  61. }
  62. open override func dataSet(forLabel label: String, ignorecase: Bool) -> ChartDataSetProtocol?
  63. {
  64. if dataSets.first?.label == nil
  65. {
  66. return nil
  67. }
  68. if ignorecase
  69. {
  70. if let label = dataSets[0].label, label.caseInsensitiveCompare(label) == .orderedSame
  71. {
  72. return dataSets[0]
  73. }
  74. }
  75. else
  76. {
  77. if label == dataSets[0].label
  78. {
  79. return dataSets[0]
  80. }
  81. }
  82. return nil
  83. }
  84. @objc override open func entry(for highlight: Highlight) -> ChartDataEntry?
  85. {
  86. return dataSet?.entryForIndex(Int(highlight.x))
  87. }
  88. /// The total y-value sum across all DataSet objects the this object represents.
  89. @objc open var yValueSum: Double
  90. {
  91. guard let dataSet = dataSet else { return 0.0 }
  92. return (0..<dataSet.entryCount).reduce(into: 0) {
  93. $0 += dataSet.entryForIndex($1)?.y ?? 0
  94. }
  95. }
  96. }