Как изменить этот код так, чтобы только некоторые свойства были общими для переменных в Swift - PullRequest
1 голос
/ 01 мая 2020

Я только начал изучать Swift и хотел создать простую диаграмму, отображающую некоторые данные.

Я создаю линейную диаграмму, используя библиотеку AnyChart, и я строю серию линий на диаграмме. Я заметил, что я повторяю почти все свойства. Как я могу сделать приведенный ниже код менее dry.

Я создаю линейную диаграмму с использованием библиотеки AnyChart, и я строю серию линий на диаграмме. Я заметил, что я повторяю почти все свойства, единственное, что меняется, - это имя исходной переменной.

Как я могу сделать меньше кода, который будет учитывать имена переменных без изменений ( серия 1, серия 2)?

let series1Mapping = set.mapAs(mapping: "{x: 'x', value: 'value'}")        
let series2Mapping = set.mapAs(mapping: "{x: 'x', value: 'value2'}")

        let series1 = chart.line(data: series1Mapping)
        let series2 = chart.line(data: series2Mapping)


        series1.name(name: data.seriesNames[0])
        series1.hovered().markers().enabled(enabled: true)
        series1.hovered().markers()
            .type(type: anychart.enums.MarkerType.CIRCLE)
            .size(size: 4)
        series1.tooltip()
            .position(position: data.position)
            .anchor(anchor: anychart.enums.Anchor.LEFT_CENTER)
            .offsetX(offset: 5)
            .offsetY(offset: 5)

        series2.name(name: data.seriesNames[1])
        series2.hovered().markers().enabled(enabled: true)
        series2.hovered().markers()
            .type(type: anychart.enums.MarkerType.CIRCLE)
            .size(size: 4)
        series2.tooltip()
            .position(position: data.position)
            .anchor(anchor: anychart.enums.Anchor.LEFT_CENTER)
            .offsetX(offset: 5)
            .offsetY(offset: 5)

1 Ответ

3 голосов
/ 01 мая 2020

Вы можете сделать это следующим образом ... Это просто грубая идея ... я не знаю, что вы делаете с объектом Series и отображением ... Но у вас может быть одна функция, которая возвращает серию и получает параметры для создайте эту серию

 func getSeries(number:Int, mapping:String) -> Series {

         let series = chart.line(data: set.mapAs(mapping: mapping))

        series.name(name: data.seriesNames[number])
        series.hovered().markers().enabled(enabled: true)
        series.hovered().markers()
            .type(type: anychart.enums.MarkerType.CIRCLE)
            .size(size: 4)
        series.tooltip()
            .position(position: data.position)
            .anchor(anchor: anychart.enums.Anchor.LEFT_CENTER)
            .offsetX(offset: 5)
            .offsetY(offset: 5)

        return series

    }

и затем создайте серию

  let series1 = getSeries(number:0 , mapping:"{x: 'x', value: 'value'}")
  let series2 = getSeries(number:1 , mapping:"{x: 'x', value: 'value2'}")

, если хотите упростить ее ... вы можете также создать строку сопоставления из числа

Спасибо

...