Charts: рдПрдХреНрд╕ рдПрдХреНрд╕рд┐рд╕ рд╡реИрд▓реНрдпреВ рд╕реНрд╡рд┐рдлреНрдЯ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 20 рдЕрдЧре░ 2016  ┬╖  33рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: danielgindi/Charts

рдирдИ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдХреБрдЫ рдЧреНрд░рд╛рдл рдмрдирд╛рдиреЗ рдореЗрдВ рдХреБрдЫ рдкрд░реЗрд╢рд╛рдиреА рд╣реБрдИ, рдкрд┐рдЫрд▓рд╛ рдХреЛрдб рдерд╛:

func setChart(dataPoints: [String], values: [Double]) {
var dataEntries: [BarChartDataEntry] = []

for i in 0..<dataPoints.count {
    let dataEntry = BarChartDataEntry(value: values[i], xIndex: i)
    dataEntries.append(dataEntry)
}

let chartDataSet = BarChartDataSet(yVals: dataEntries, label: "Units Sold")
let chartData = BarChartData(xVals: months, dataSet: chartDataSet)
barChartView.data = chartData
}

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╣реАрдиреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдорд╛рди рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

let chartData = BarChartData(xVals: months, dataSet: chartDataSet)

рдирдИ рд░рд┐рд▓реАрдЬ рдХреЗ рдмрд╛рдж рдЙрд╕реА рдЧреНрд░рд╛рдл рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ:

func setChart(dataPoints: [String], values: [Double]) {

    var dataEntries: [BarChartDataEntry] = []

    for i in 0..<dataPoints.count {
        let dataEntry = BarChartDataEntry(x: Double(i+2), y:values[i], data: months )
        dataEntries.append(dataEntry)
    }

    let chartDataSet = BarChartDataSet(values: dataEntries, label: "Units Sold")

    let chartData = BarChartData()
    chartData.addDataSet(chartDataSet)
    barChartView.data = chartData

}

рдореИрдВ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХреНрд╕ рдЕрдХреНрд╖ рдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж !!

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ рднреА рдРрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдерд╛ред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, рд▓реЗрдХрд┐рди x рдПрдХреНрд╕рд┐рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред @ajimenezjulio рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдВрдиреЗ BarChartView рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

extension BarChartView {

    private class BarChartFormatter: NSObject, IAxisValueFormatter {

        var labels: [String] = []

        func stringForValue(_ value: Double, axis: AxisBase?) -> String {
            return labels[Int(value)]
        }

        init(labels: [String]) {
            super.init()
            self.labels = labels
        }
    }

    func setBarChartData(xValues: [String], yValues: [Double], label: String) {

        var dataEntries: [BarChartDataEntry] = []

        for i in 0..<yValues.count {
            let dataEntry = BarChartDataEntry(x: Double(i), y: yValues[i])
            dataEntries.append(dataEntry)
        }

        let chartDataSet = BarChartDataSet(values: dataEntries, label: label)
        let chartData = BarChartData(dataSet: chartDataSet)

        let chartFormatter = BarChartFormatter(labels: xValues)
        let xAxis = XAxis()
        xAxis.valueFormatter = chartFormatter
        self.xAxis.valueFormatter = xAxis.valueFormatter

        self.data = chartData
    }
} 

рдкреНрд░рдпреЛрдЧ

func setChart(){
        let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
        let unitsSold = [20.0, 4.0, 3.0, 6.0, 12.0, 16.0, 4.0, 18.0, 2.0, 4.0, 5.0, 4.0]

        barChartView.setBarChartData(xValues: months, yValues: unitsSold, label: "Monthly Sales")
    } 

рд╕рднреА 33 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рд╕реНрдХреИрдЯрд░ рдЪрд╛рд░реНрдЯ рдореЗрдВ рдПрдХреНрд╕-рдЕрдХреНрд╖ рдорд╛рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдЕрдм рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
рдореБрдЭреЗ 2 рдЕрдВрдХ рдорд┐рд▓реЗ:

1: рдбреЗрдЯрд╛рдПрдВрдЯреНрд░реА = BarChartDataEntry (x: рдбрдмрд▓ (i + 2), y: рдорд╛рди [i], рдбреЗрдЯрд╛: рдорд╣реАрдиреЗ)
BarChartDataEntry рд╡рд┐рдзрд┐ рдХреЗ рдмрдЬрд╛рдп рдЪрд╛рд░реНрдЯрдбрд╛рдЯрд╛рдПрдВрдЯреНрд░реА (рдПрдХреНрд╕, рд╡рд╛рдИ) рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред

2: рдЪрд╛рд░реНрдЯрдбреЗрдЯрд╛ = рдмрд╛рд░ рдЪрд╛рд░реНрдЯрдбреЗрдЯрд╛ () -> рдЪрд╛рд░реНрдЯрдбреЗрдЯрд╛ = рдмрд╛рд░ рдЪрд╛рд░реНрдЯрдбреЗрдЯрд╛ (рдбреЗрдЯрд╛рд╕реЗрдЯ) рджреЗрдВ

рдЙрдореНрдореАрдж рд╣реИ, рдпрд╣ рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХреЗред

рдзрдиреНрдпрд╡рд╛рдж NyoSeint, рдЖрдк рдЕрдкрдиреА рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╕рд╣реА рд╣реИрдВ рдЖрдк рдПрдХреНрд╕-рдЕрдХреНрд╖ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рддрд░реАрдХреЗ рд╕реЗ, рдореИрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдПрдХреНрд╕-рдЕрдХреНрд╖ рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЪрд╛рд░реНрдЯрдбреЗрдореЛ рдХреА рдЬрд╛рдБрдЪ рдХреА рд╣реИ? рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЙрддреНрддрд░ рд╣реИрдВред

рдореИрдВ рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рднреА рдвреВрдВрдв рд░рд╣рд╛ рд╣реВрдВ, рдпрд╣рд╛рдВ рдкрд╣рд▓реЗ рдПрдХ рдХреЗрд╕ рдЦреЛрд▓рд╛ - https://github.com/danielgindi/Charts/issues/1331

рдбреЗрдореЛ рдореЗрдВ рдЬрд╡рд╛рдм рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЬрд╛рдП рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред рдзрдиреНрдпрд╡рд╛рдж

рдореБрдЭреЗ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рджреВрд╕рд░рд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХреЗ, рдмрд┐рдирд╛ рдирдИ рдХрдХреНрд╖рд╛ рдмрдирд╛рдП, рдареАрдХ рдпрд╣реА рдореИрдВрдиреЗ рдкрд╛рдпрд╛:

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдк рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХрд╛ рдлреЙрд░реНрдореЗрдЯрд░ рд╡рд░реНрдЧ рд╣реЛрдЧрд╛ рдФрд░ IAxisValueFormater рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝реЗрдВ, рдлрд┐рд░ рдЖрдк рдирдП рдорд╛рдиреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП stringForValue рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдкрд╣рд▓рд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рди рд╣реЛрддрд╛ рд╣реИ (рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛) рдФрд░ рджреВрд╕рд░рд╛ рд╡рд╣ рдЕрдХреНрд╖ рд╣реИ рдЬрд╣рд╛рдБ рдорд╛рди рд╣реИред

import UIKit
import Foundation
import Charts

@objc(BarChartFormatter)
public class BarChartFormatter: NSObject, IAxisValueFormatter{

var months: [String]! = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]


public func stringForValue(value: Double, axis: AxisBase?) -> String {

    return months[Int(value)]
}

}

рдЕрдм рдЖрдкрдХреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдкрдХреЗ setChart() рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЖрдкрдХреЛ рджреЛ рд╡реЗрд░рд┐рдПрдмрд▓ рдмрдирд╛рдиреЗ рд╣реЛрдВрдЧреЗ, рдПрдХ рдЖрдкрдХреЗ рдлреЙрд░реНрдореЗрдЯрд░ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдФрд░ рдПрдХ рдПрдХреНрд╕рд┐рд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП:

let formato:BarChartFormatter = BarChartFormatter()
let xaxis:XAxis = XAxis()

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЗрди рд▓реВрдк рдХреЗ рдЕрдВрдд рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝реЗрдВ рдФрд░ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдФрд░ рдЕрдХреНрд╖ рдХреЛ рдЕрдкрдиреЗ рдлрд╝реЙрд░реНрдореЗрдЯрд░ рдЪрд░ рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ:

formato.stringForValue(Double(i), axis: xaxis)

рд▓реВрдкрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рд░реВрдк рдХреЛ рдЕрдкрдиреЗ рдЕрдХреНрд╖ рдЪрд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

xaxis.valueFormatter = formato

рдЕрдВрддрд┐рдо рдЪрд░рдг barChartView рдореЗрдВ рд╕реНрд╡рд░реВрдкрд┐рдд рдирдП xaxis рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИ:

barChartView.xAxis.valueFormatter = xaxis.valueFormatter

рдФрд░ рдпрд╣ рд╕реЗрдЯ рдЪрд╛рд░реНрдЯ () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрдиреНрдп рд╕рднреА рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ, рдмрд╕ рдЗрд╕реЗ рд╡рд╣реАрдВ рд░рдЦреЗрдВ рдЬрд╣рд╛рдВ рд╡реЗ рд╣реИрдВ, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

@ajimenezjulio рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИ :-)

рд╕реНрд╡рддрдВрддреНрд░ x-рдорд╛рдиреЛрдВ рдХреЗ рдХрд╛рд░рдг рдЕрдм рд╣рдо рдлрд╝реЙрд░реНрдореЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдо рдЖрд░рд╛рдорджрд╛рдпрдХ рд╣реИ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рд╕рд░рд▓реАрдХреГрдд рдПрдХреНрд╕-рдЗрдВрдбреЗрдХреНрд╕ рд╕рд░рдгреА рд╣реБрдЖ рдХрд░рддреА рдереА, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреА рдПрдХ рдкреВрд░реА рджреБрдирд┐рдпрд╛ рдЦреЛрд▓рддреА рд╣реИред рдЗрд╕рдиреЗ рдПрдХреНрд╕-рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдЙрдирдХреЗ рд▓реЗрдмрд▓ рдХреЗ рд╕рд╛рде рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдмрд╛рдзрд╛ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рд░рд▓ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдо рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рдирдП рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдПрдВрдЧреЗред

рдХреГрдкрдпрд╛ рд╣рдореЗрдВ xaxis рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рджреЗрдВред
рдкрд┐рдЫрд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЙрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдерд╛! (рдпрд╛ рд╕реНрд╡рд┐рдлреНрдЯ/рдУрдмреАрдЬреЗрд╕реА рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓)

рдзрдиреНрдпрд╡рд╛рджред

рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди ?

@ рдбреЗрдВрдЯреЗ20007 рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рд▓реЛрдЧ рдХрд┐рд╕реА рднреА рдПрдХреНрд╕-рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рди рдХреЗрд╡рд▓ 0, 1, 2, рдмрд▓реНрдХрд┐ 0, 1.3, 2.7 рднреА... рдПрдХ рд╕рд░рдгреА рдРрд╕реЗ рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЗрдмрд▓ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИред

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдПрдХреНрд╕ рдЕрдХреНрд╖ рдкрд░ рдорд╣реАрдиреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рднреА рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ?

рдзрдиреНрдпрд╡рд╛рджред

рдирдорд╕реНрддреЗ, рдореИрдВ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рджрд╛рдИрдВ рдУрд░ рдЬрд╛рддрд╛ рд╣реВрдВ рддреЛ рдЙрд╕рдиреЗ рдХрд╣рд╛ рдХрд┐ рд╕реВрдЪрдХрд╛рдВрдХ рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╕рд┐рд░реНрдл 12 рдорд╣реАрдиреЗ рд╣реИрдВ

рдореБрдЭреЗ x-рдЕрдХреНрд╖ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рднреА рдЪрд╛рд╣рд┐рдП.. рдореИрдВ рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рдЪрд╛рд░реНрдЯ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╡рд╛рдкрд╕ рдЪрд▓рд╛ рдЧрдпрд╛ред

рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣ рдерд╛ рдХрд┐ рдЬрдм рдореИрдВ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЬрд╛рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ lib рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╕рдордп рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрддрд╛ рд╣реВрдВ

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛ "рдПрдХреНрд╕ рдПрдХреНрд╕рд┐рд╕ рд╡реИрд▓реНрдпреВ рд╕реНрд╡рд┐рдлреНрдЯ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ?" рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рд╣рд╛рдБ рдореБрдЭреЗ рднреАред рдореИрдВрдиреЗ @ajimenezjulio . рдХреЗ рд╕рдорд╛рди рдЙрддреНрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛

рдореИрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдореЗрдВ рд╣реИ, рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ @ajimenezjulio рдХреЗ рдЙрддреНрддрд░ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рдпрд╣ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛: рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ IAxisValueFormatter рдХреЛ рдХрднреА рдкрд╣рдЪрд╛рдирд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛ред

рдореБрдЭреЗ рднреА рдРрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдерд╛ред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, рд▓реЗрдХрд┐рди x рдПрдХреНрд╕рд┐рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред @ajimenezjulio рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдВрдиреЗ BarChartView рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

extension BarChartView {

    private class BarChartFormatter: NSObject, IAxisValueFormatter {

        var labels: [String] = []

        func stringForValue(_ value: Double, axis: AxisBase?) -> String {
            return labels[Int(value)]
        }

        init(labels: [String]) {
            super.init()
            self.labels = labels
        }
    }

    func setBarChartData(xValues: [String], yValues: [Double], label: String) {

        var dataEntries: [BarChartDataEntry] = []

        for i in 0..<yValues.count {
            let dataEntry = BarChartDataEntry(x: Double(i), y: yValues[i])
            dataEntries.append(dataEntry)
        }

        let chartDataSet = BarChartDataSet(values: dataEntries, label: label)
        let chartData = BarChartData(dataSet: chartDataSet)

        let chartFormatter = BarChartFormatter(labels: xValues)
        let xAxis = XAxis()
        xAxis.valueFormatter = chartFormatter
        self.xAxis.valueFormatter = xAxis.valueFormatter

        self.data = chartData
    }
} 

рдкреНрд░рдпреЛрдЧ

func setChart(){
        let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
        let unitsSold = [20.0, 4.0, 3.0, 6.0, 12.0, 16.0, 4.0, 18.0, 2.0, 4.0, 5.0, 4.0]

        barChartView.setBarChartData(xValues: months, yValues: unitsSold, label: "Monthly Sales")
    } 

рдЕрд░реЗ, рдХреНрдпрд╛ рдЕрдиреНрдп рдЪрд╛рд░реНрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ " BarChartFormatter рдкреНрд░реЛрдЯреЛрдХреЙрд▓ IAxisValueFormatter рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИред

рдЖрдкрдиреЗ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛? рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдерд╛ред рдХреНрдпрд╛ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдПрдХреНрд╕ рдЕрдХреНрд╖ рдореЗрдВ рд╕рд░рдгреА ["рдЬреЗ", "рдПрдл", рдЖрджрд┐ ... рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ? рдореИрдВ рдпрд╣рд╛рдБ рдЦрд░рд╛рдм рд╣реВрдБред рдпреЗ "рдЙрджрд╛рд╣рд░рдг рдореЗрд░реЗ рдХреМрд╢рд▓ рд╕реНрддрд░ рд╕реЗ рдКрдкрд░ рд╣реИрдВред

рдХреНрдпрд╛ рдУрдмреАрдЬреЗрд╕реА рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕ рдПрдХреНрд╕рд┐рд╕ рдХреЛ рдХрд╕реНрдЯрдо рд▓реЗрдмрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ?

YourViewControllerViewController рдореЗрдВ var рдорд╣реАрдиреЗ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ: [рд╕реНрдЯреНрд░рд┐рдВрдЧ] = рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдорд╣реАрдиреЗ рдХреЗ рдорд╛рди рд╕реЗрдЯ рдХрд░реЗрдВ
рдПрдХреНрд╕рдЯреЗрдВрд╢рди YourViewControllerViewController: IAxisValueFormatter {
func stringForValue (_ рдорд╛рди: рдбрдмрд▓, рдЕрдХреНрд╖: рдПрдХреНрд╕рд┐рд╕рдмреЗрд╕?) -> рд╕реНрдЯреНрд░рд┐рдВрдЧ {
рд╡рд╛рдкрд╕реА рдорд╣реАрдиреЗ [рдЗрдВрдЯ (рдорд╛рди)% рдорд╣реАрдиреЗред рдЧрд┐рдирддреА]
}
}

рдирдорд╕реНрддреЗ,
рдореИрдВрдиреЗ рд╕рдорд╛рдзрд╛рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ 'рдЗрдВрдбреЗрдХреНрд╕ рдЖрдЙрдЯ рдСрдл рд░реЗрдВрдЬ'

рд╣рд╛рдБ, рдХрд╛рд╢ рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭ рдкрд╛рддрд╛ рдХрд┐ stringForValue рдХреЛ рдХреИрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЪрд╛рд░реНрдЯ/рдбреЗрдЯрд╛ рдХрд╛ рдЖрдкрдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХреИрд╕реЗ рдмрджрд▓рддрд╛ рд╣реИ, рдЗрд╕реЗ рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЬрд╛рдВрдЪ рдХреАред рд╣рд╛рд▓рд╛рдВрдХрд┐ тАНтЩВя╕П . рдПрдХ рддрд░рд╣ рдХрд╛ рдмреИрдВрдб-рд╕рд╣рд╛рдпрддрд╛

       func stringForValue(_ value: Double, axis: AxisBase?) -> String {
            let index = Int(value)
            if index < labels.count && index >= 0 {
                return labels[index]
            } else {
                return ""
            }
        }

рдЦреБрд▓рд╛ рдмрдЯрди

@robotsquidward - рдореИрдВ рднреАред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдиреЗ рд╕рдордЭрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдмреЗрд╣рддрд░ рдЕрднреА рддрдХ, рдбреЗрдореЛ рдореЗрдВ рд╕реЗ рдПрдХ рдиреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд▓реЗрдмрд▓ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдпрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдорджрдж рдХрд░реЗрдЧрд╛ред рдореБрдЭреЗ рдмрд╕ рдЬрд╡рд╛рдмреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХрд╣рддреЗ рд╣реИрдВ look at stringForValue() ред рдЖрд╣реЗрдВ...

@AlexSmet
рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдПрдХ рд▓рд╛рдЗрди рдЪрд╛рд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ред рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рджреГрд╢реНрдп рдмрдЧ рд╣реИред рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдХреНрдпреЛрдВ рдПрдХреНрд╕ рдЕрдХреНрд╖ рдкрд░ рджрд┐рди рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЧрдардмрдВрдзрди рдирд╣реАрдВ рд╣реИрдВ? рд╕рд╛рде рд╣реА рд╕реЛрдорд╡рд╛рд░ рдФрд░ рдмреБрдзрд╡рд╛рд░ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ 2 рдмрд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рджреЗрдЦреЗрдВ: https://imgur.com/a/OG7OuSY

dataContent1 = ["рд╕реЛрдо", "рдордВрдЧрд▓", "рдмреБрдз", "рдЧреБрд░реБ", "рд╢реБрдХреНрд░рд╡рд╛рд░"]
рдбреЗрдЯрд╛ рд╕рд╛рдордЧреНрд░реА 2 = [230, 320, 403, 430, 312]
рдЪрд╛рд░реНрдЯ рд╡реНрдпреВ.рд╕реЗрдЯрд▓рд╛рдЗрди рдЪрд╛рд░реНрдЯрдбреЗрдЯрд╛ (xValues: dataContent1, yValues: dataContent2, рд▓реЗрдмрд▓: "рдмреАрдЯреАрд╕реА")

@рдмреЗрдВрдЬрд╛рдИ
рдЖрдкрдХреЛ xAxis рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЗрдмрд▓ рдЧрдгрдирд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдорд╛рдЗрди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреИрд╕реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрд╕ рдЕрдкрдиреЗ setLineChartData рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВ:
self.xAxis.setLabelCount(xValues.count, force: true)

@benzai рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдореБрдЭреЗ @AlexSmet рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рдирд╛ рдкрдбрд╝рд╛ рдФрд░ force: false рд╕реЗрдЯ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рддрд╛рдХрд┐ рдореЗрд░рд╛ рдЪрд╛рд░реНрдЯ 12 рдорд╣реАрдиреЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛ рд╕рдХреЗ:

barChartView.xAxis.setLabelCount(dataPoints.count, force: false)

рдЬрдм force рдХреЛ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЪрд╛рд░реНрдЯ рдлрд╝реЙрд░реНрдореЗрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдореЗрдВ рдСрдбрдмреЙрд▓ xAxis рдорд╛рдиреЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 0.0 рдХреЗ рдмрдЬрд╛рдп -0.5) рдФрд░ рд▓реЗрдмрд▓ рд╕рдВрдмрдВрдзрд┐рдд yValue рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд░реЗрдЦрд┐рдд рдирд╣реАрдВ рдереЗред

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдорд╛рд░реНрдХрдЕрдк рдХрд╣рддрд╛ рд╣реИ 'рдпрджрд┐ рд╕рд╣реА рд╣реИ, рддреЛ y-рд▓реЗрдмрд▓ рдХреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛' рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ y- рд▓реЗрдмрд▓ рдХреЗ рд▓рд┐рдП рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ x рдФрд░ y- рдЕрдХреНрд╖ рджреЛрдиреЛрдВ рд▓реЗрдмрд▓ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рд╕рд╣реА?

рдХреНрдпрд╛ рдореИрдВ рдмрд╛рдПрдБ рдЕрдХреНрд╖ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрдмрд▓ рд╕реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ?

рд▓рд╛рдЗрди рдЪрд╛рд░реНрдЯ рдХреЗ рд▓рд┐рдП:

self.lineChart.xAxis.valueFormatter = IndexAxisValueFormatter(values: self.chartLabels)
self.lineChart.xAxis.avoidFirstLastClippingEnabled = true

рдЖрдЬ рдЖрдк рдХреИрд╕реЗ рд╣реИрдВред
рдХреГрдкрдпрд╛ рдореЗрд░реА рдорджрдж рдХрд░реЗрдВ, рдореИрдВ рд╕реНрд╡рд┐рдлреНрдЯ 4 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░ рдЪрд╛рд░реНрдЯ рдХреЗ рд╕рд╛рде рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

tE1U5
рдореИрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░реЗрдЦрд╛ рдЪрд╛рд░реНрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБред
рджреЛ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдмреАрдЪ, рдПрдХрд╛рдзрд┐рдХ рдмрд┐рдВрджреБ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ? (рдЙрджрд╛рд╣рд░рдг, рд╕реБрдмрд╣ 7 рдмрдЬреЗ рд╕реЗ 8 рдмрдЬреЗ рдХреЗ рдмреАрдЪ рдХрдИ рдмрд┐рдВрджреБ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ)

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕