gpt4 book ai didi

swift - 从闭包中调用使用 inout 数组的函数

转载 作者:行者123 更新时间:2023-11-28 10:02:18 24 4
gpt4 key购买 nike

既然 Swift 1.0 已经发布,我决定更新我在 Swift beta 1 期间所做的项目。但是,有一个特殊的问题,我似乎无法解决由于更新的数组语义和 inout 关键字而出现的问题。考虑以下两个函数(您可以将它们粘贴到 playground 中):

func bubbleSort<T : Comparable>(inout arr : [T]) {
var numSwaps = 0
do {
numSwaps = 0
for i in 0..<(arr.count - 1) {
if arr[i] > arr[i + 1] {
(arr[i], arr[i + 1]) = (arr[i + 1], arr[i])
numSwaps++
}
}
} while numSwaps != 0
}

func testFunc(sortFunc: ([Int]) -> ()) {
sortFunc([5,4,3,2,1])
}

我似乎无法让两者一起工作。我尝试使用速记:

testFunc {bubbleSort(&$0)}

我也试过不用速记:

testFunc { (arr: [Int]) -> () in
bubbleSort(&arr)
}

无论哪种情况,我都会收到错误:

error screenshot

这是一个错误,还是我搞砸了什么?提前致谢!

最佳答案

您遇到的是默认情况下方法参数是不可变的,而输入输出函数正在发生变化。您不能使用闭包简写,因为您需要使用 var 关键字将闭包的参数声明为可变的,如下所示:

func testFunc(sortFunc: ([Int]) -> ()) {
sortFunc([5,4,3,2,1])
}

testFunc { (var arr: [Int]) -> () in
bubbleSort(&arr)
}

现在您可以调用 bubbleSort 并将 arr 作为 in-out 参数。

关于swift - 从闭包中调用使用 inout 数组的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25757109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com