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)
}