swift - 如何将数组 block 传递给 inout 函数?类型删除?

标签 swift type-erasure inout

我有一个函数

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/

相关文章:

ios - swift 3 : Playing Audio based on a string variable

objective-c - 如何在 Swift 中调用 [self new]

c++ - 在不知道确切子类型的情况下访问多态类型,例如变体

verilog - 如何写入 inout 端口并从同一模块的 inout 端口读取?

ios - 有没有一种方法可以在 Swift 开关中检查多个条件?

rust - Rust 是否删除泛型类型?

Java 按通用类型存储条件

Swift:具有通用函数和约束的 inout

arrays - 更新通过引用传递的数组中的项目

ios - 从网络为 TableViewController 加载数据