arrays - 将 RandomAccessSlice 转换为 RandomAccessCollection

标签 arrays swift

当我们尝试从 Array 中检索一系列元素时,我们会返回一个 ArraySlice:

let array = [1, 3, 5, 2]
let arraySlice = array[..<2] // elements up to index 1 == [1, 3]

我们可以像这样将它转换回 Array 类型:

let arrayFromSlice = Array(arraySlice)

假设您要创建一个返回任何 RandomAccessCollection 的前 3 个元素的方法:

func first3Elements<T: RandomAccessCollection>(_ c: T) -> T {
  let slice = c.prefix(3)

  // COMPILER ERROR: non-nominal type 'T' 
  // does not support explicit initialization
  return T(slice)
}

是否可以执行此转换?

最佳答案

这是我第一次尝试使用类型删除,但我想还有更好的解决方案。

func first3Elements<T>(_ c: AnyRandomAccessCollection<T>) -> AnyRandomAccessCollection<T> {
    let slice = c.prefix(3)
    return AnyRandomAccessCollection(slice)
}

let array = AnyRandomAccessCollection([1, 2, 3, 4])
let result = first3Elements(array)

for x in result {
    print(x)
}

关于arrays - 将 RandomAccessSlice 转换为 RandomAccessCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46233398/

相关文章:

ios - 更新 pod 后使用未声明的类型 'GraphRequestResult'

ios - 如何构建具有特定行数的 TableView ?

javascript - 在 Javascript 中将键值对附加到数组

java - 测验程序中数组索引越界异常

c - 对结构体指针数组进行排序

javascript - 从数组中删除匹配的字符串

php - 我如何重组这个数组以将数据压缩成 PHP 中更有用的格式?

ios - Firebase Cloud Messaging 通知未显示在 iOS 设备上(前台和后台)

swift - 展开字典值 Swift

ios - Swift 中的 cURL 等价物 - iOS