arrays - 无法使用 CountableRange<Int> 类型的索引为 Array<Element> 类型的值添加下标

标签 arrays swift generics

错误: 无法使用 CountableRange 类型的索引为 Array 类型的值添加下标

我想从任何数组/序列中找到一些顶级元素。

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

最佳答案

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

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

这里的错误实际上并不是您无法使用 CountableRange 类型的索引为 Array 类型的值添加下标,而是您无法这样做来生成 类型的结果数组

用范围作为 Array 的下标会生成 ArraySlice,而不是 Array。因此,您的代码必须是:

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

关于arrays - 无法使用 CountableRange<Int> 类型的索引为 Array<Element> 类型的值添加下标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46041945/

相关文章:

java - 比较 2 个单独数组中的 2 组整数值

ios - 子类中的附加初始化器覆盖父类(super class)中的初始化器

java - 需要不兼容的类型 : Class<T> found: Class<CAP#1> where T is a type-variable

c# - 泛型:如何从两个类中的一个派生?

php - 这个 PHP 如何知道要使用哪个数组键/值?

javascript - 从嵌套数组中获取数据

java - 数组遍历算法用有理数加载数组

ios - 如何在 iOS 9 中从电子邮件 URL 打开应用程序?

ios - 为现有对象添加扩展名的 Swift 文件命名的最佳实践是什么?

c# - 对 IQueryable OfType<> 的反射(reflection)