【问题标题】:get compiler error in swift indexOf()在 swift indexOf() 中获取编译器错误
【发布时间】:2016-04-20 16:58:05
【问题描述】:

所以我有这样的功能:

    var localIndices: [ChartHighlight] = []

    for globalHighlight in globalIndices
    {
        if let globalSet = data?.dataSets[globalHighlight.dataSetIndex]
        {
            if globalSet.dynamicType === dataSetType
            {
                let chartData = getChartData(dataSetType)

                if (chartData == nil)
                {
                    return globalIndices
                }

                let localdataSetIndex = chartData!.dataSets.indexOf(globalSet)
                if (localdataSetIndex != nil)
                {
                    localIndices.append(ChartHighlight(xIndex: globalHighlight.xIndex, dataSetIndex: localdataSetIndex!, stackIndex: globalHighlight.stackIndex))
                }
            }
            else
            {
                return globalIndices
            }
        }
    }

编译器抱怨

let localdataSetIndex = chartData!.dataSets.indexOf(globalSet)

这么说

无法将“IChartDataSet”类型的值转换为预期的参数类型“@noescape (IChartDataSet) throws -> Bool”

我很困惑为什么我不能将普通的indexOf() 用于[IChartDataSet]。这是否与 chartData!.dataSets[IChartDataset]IChartDatasetprotocol 类型有关? 我没有看到 swift doc 提到这一点,或者我错过了它......

【问题讨论】:

  • 您的IChartDataSet 是否符合Equatable?可能不是,这就是为什么你不能使用通常的indexOf
  • @AlexanderDoloz 我检查了它不符合要求。谢谢!

标签: swift


【解决方案1】:

要使用 indexOf 方法并将元素作为输入参数,您的元素类型 dataSetsIChartDataSet 必须符合 Equatable 协议,正如您从 CollectionType 扩展定义中看到的那样:

    extension CollectionType where Generator.Element : Equatable {
       /// Returns the first index where `value` appears in `self` or `nil` if
        /// `value` is not found.
        ///
        /// - Complexity: O(`self.count`).
        @warn_unused_result
        public func indexOf(element: Self.Generator.Element) -> Self.Index?
    }

或者你可以使用谓词闭包来代替:

let localdataSetIndex = chartData!.dataSets.indexOf { $0 === globalSet }

【讨论】:

  • 非常感谢。其实我是基于一个开源项目github.com/danielgindi/Charts进行开发的。是的 IChartDatSet 不符合 Equatable。您能否举例说明在这种情况下应该如何实现 Equatable?
  • 我的快速文档说(我正在使用 Dash3)定义是 @warn_unused_result func indexOf(_ element: Self.Generator.Element) -> Self.Index?。嗯,很遗憾文档不正确。这是 swift 2.2 的最新变化吗?
猜你喜欢
  • 2017-06-07
  • 2017-03-23
  • 1970-01-01
  • 2018-04-30
  • 2015-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
相关资源
最近更新 更多