无法使用类型为CountableRange <int>的索引下标Array <element>类型的值

时间:2017-09-04 17:41:35

标签: arrays swift generics

错误: 无法下标类型为Array的值,其索引类型为CountableRange

我想找一些来自任何数组/序列的顶级元素。

extension Array {
    func top(max:Int) -> Array {
        guard self.count > max else {
            return self
        }
        let last = max - 1
        return self[0..<max]
    }
}

2 个答案:

答案 0 :(得分:0)

此功能已存在于标准库中,格式为Array.prefix(_:)

但要解决此代码中的问题:

此处的错误实际上并不是您不能subscript a value of type Array with index of type CountableRange,而是您无法生成Array类型的结果。

按范围订阅Array会产生ArraySlice,而非Array。因此,您的代码必须是:

extension Array {
    func first(_ maxLength: Int) -> ArraySlice<Element> {
        return self[0 ..< Swift.min(maxLength, self.count)]
    }
}

答案 1 :(得分:0)

感谢@Leo和@Alexander的快速回复:)

extension Array {
    func first(max: Int) -> Array {
        return Array(prefix(max))
    }
}