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
相关产品推荐
相关产品推荐

