Dun*_*n C 3 arrays extension-methods stride swift
此代码引发编译器错误:“参数类型‘StrideTo’预计是类或类约束类型的实例”
extension Array {
func chunks(_ chunkSize: Int) -> [[Element]] {
let indexes = Array(stride(from: 0, to: count, by: chunkSize)) // This line won't compile
return [[Element]]()
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您在数组扩展之外使用非常相似的代码:
let array = Array(stride(from: 0, to: 20, by: 4))
Run Code Online (Sandbox Code Playgroud)
它给了我我所期望的,一个 array [0, 4, 8, 12, 16]。
为什么在数组扩展的函数中创建临时数组是非法的?它是否以某种方式调用stride()数组上的实例方法?如果是这样,有没有办法告诉编译器我想调用全局stride()函数?
这是一个错误:SR-13847 扩展中使用了错误的泛型:
由于某种原因,当在扩展中调用初始化程序时,编译器会尝试匹配不相关的泛型。
在你的情况下,Array被解释为Array<Element>。作为解决方法,您可以显式指定索引数组的类型:
let indexes = Array<Int>(stride(from: 0, to: count, by: chunkSize))
Run Code Online (Sandbox Code Playgroud)