You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 4中使用SwiftChart遇'enumerate未解析标识符'错误求解

问题:SwiftChart中使用enumerate报错“Use of unresolved identifier 'enumerate'”

我在应用中使用SwiftChart库,想要实现图表视图,写了如下代码:

class MyViewController: UIViewController, ChartDelegate { 
    override func viewDidLoad() { 
        lineChart.delegate = self 
    } 

    // Chart delegate 
    func didTouchChart(_ chart: Chart, indexes: Array<Int?>, x: Double, left: CGFloat) { 
        // Do something on touch 
    } 

    func didFinishTouchingChart(_ chart: Chart) { 
        // Do something when finished 
    } 

    func didEndTouchingChart(_ chart: Chart) { 
        // Do something when ending touching chart 
    } 

    func didTouchChart(chart: Chart, indexes: Array<Int?>, x: Double, left: CGFloat) { 
        for (seriesIndex, dataIndex) in enumerate(indexes) { 
            if dataIndex != nil { 
                // The series at `seriesIndex` is that which has been touched 
                let value = chart.valueForSeries(seriesIndex, atIndex: dataIndex) 
            } 
        }
    }
}

但运行时收到错误提示:

Use of unresolved identifier 'enumerate'

请问该错误的原因是什么?


原因及解决办法

这个错误是Swift版本语法变更导致的:

  • enumerate是Swift 2及更早版本的旧语法,用于遍历数组时同时获取索引和对应元素。在Swift 3及之后的版本中,这个全局函数被重命名为enumerated(),并且改成了数组的实例方法来调用。
  • 你代码里的enumerate(indexes)是旧写法,当前Swift版本已经不再支持这个全局函数,所以编译器找不到它,就抛出了“未解析的标识符”错误。

把代码改成下面这样就能解决问题,同时还优化了可选值的解包方式(Swift 3+更推荐的规范写法):

func didTouchChart(chart: Chart, indexes: Array<Int?>, x: Double, left: CGFloat) {
    // 改用数组的enumerated()实例方法
    for (seriesIndex, dataIndex) in indexes.enumerated() {
        // 用可选绑定安全解包dataIndex
        if let index = dataIndex {
            // The series at `seriesIndex` is that which has been touched
            let value = chart.valueForSeries(seriesIndex, atIndex: index)
        }
    }
}

内容的提问来源于stack exchange,提问作者Best Moments

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:36:43