我有一个函数
func doThing(inout array: [Int]) { //thing }
我有数组
var stuff = [0,1,2,3,4,5,6]
我希望 doThing
仅对前三个元素进行操作。
doThing(&stuff[0..<3])
从那时起就不起作用了
var partOfStuff: ArraySlice<Int> = stuff[0..<3]
和doThing
不接受ArraySlice
。我能想到的最好的办法是将 stuff
嵌入到 AnyCollectionType
或其他一些类型删除的结构中,并将 doStuff
的参数更改为类型删除类型。但这似乎不值得付出努力,而且非常不优雅,我认为不使用 inout
会更好。
大家有更好的办法吗?
最佳答案
ArraySlice
是写时复制的,因此当您将其用作 inout
时,您正在修改原始数组的副本。最好传递您要修改的索引:
// Double the elements at the indicated indices
func doThing(inout array: [Int], onIndices indices: [Int]) {
for i in indices {
array[i] *= 2
}
}
var stuff = [0,1,2,3,4,5,6]
doThing(&stuff, onIndices: Array(0..<3))
关于swift - 如何将数组 block 传递给 inout 函数?类型删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37403472/