如何重构此代码,以便在Swift中的变量之间仅共享某些属性

问题描述 投票:0回答:1

我才刚刚开始学习敏捷,并想创建一个显示一些数据的简单图表。

我正在使用AnyChart库创建折线图,并且在图表上绘制了一系列折线。我注意到我重复了几乎所有的属性。我如何使下面的代码不那么干燥。

我正在使用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)
ios swift refactoring dry
1个回答
0
投票

您可以这样操作。这只是一个粗略的主意...我不知道您正在执行的Series对象和映射...但是您可以使用一个函数来返回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'}")

如果您想使其更简单……您也可以从数字中创建映射字符串

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.