【问题标题】:How to refactor this code so only some properties are shared between variables in Swift如何重构此代码,以便在 Swift 中的变量之间仅共享一些属性
【发布时间】:2020-04-30 22:10:53
【问题描述】:

我刚开始学习 swift,想创建一个简单的图表来显示一些数据。

我正在使用 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)

【问题讨论】:

  • 获取重复的代码并将其移动到一个函数中,该函数获取您的映射并返回一个图表。
  • 您是否使用for 循环进行过调查?
  • 我试过让它工作,但是我不明白如何返回带有各种数据类型的函数。

标签: ios swift refactoring dry


【解决方案1】:

你可以这样做......这只是一个粗略的想法......我不知道你在做什么系列对象和映射......但是你可以有一个返回系列并获取参数的函数创建该系列

 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'}")

如果你想让它更简单......你也可以从数字创建映射字符串

谢谢

【讨论】:

  • 完成。抱歉耽搁了。
猜你喜欢
  • 2019-11-11
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-24
相关资源
最近更新 更多