Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将RandomAccessSlice转换为RandomAccessCollection_Arrays_Swift - Fatal编程技术网

Arrays 将RandomAccessSlice转换为RandomAccessCollection

Arrays 将RandomAccessSlice转换为RandomAccessCollection,arrays,swift,Arrays,Swift,当我们试图从数组中检索一系列元素时,会返回一个数组片: let array = [1, 3, 5, 2] let arraySlice = array[..<2] // elements up to index 1 == [1, 3] 假设您要创建一个方法,该方法返回任意RandomAccessCollection的前3个元素: func first3Elements<T: RandomAccessCollection>(_ c: T) -> T { let sl

当我们试图从
数组
中检索一系列元素时,会返回一个
数组片

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

假设您要创建一个方法,该方法返回任意
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(c:T)->T{
let slice=c.前缀(3)
//编译器错误:非标称类型“T”
//不支持显式初始化
返回T(切片)
}

是否可以执行此转换

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

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)
}
func first3Elements(\uc:AnyRandomAccessCollection)->AnyRandomAccessCollection{
let slice=c.前缀(3)
返回AnyRandomAccessCollection(切片)
}
让数组=AnyRandomAccessCollection([1,2,3,4])
让结果=前3个元素(数组)
对于结果中的x{
打印(x)
}

@MartinR你知道吗?
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)
}