gpt4 book ai didi

arrays - Swift 通用数组 'not identical' 错误

转载 作者:搜寻专家 更新时间:2023-10-31 08:14:26 24 4
gpt4 key购买 nike

我只是在浏览一些显然在 Beta3 中已经过时的 Swift tuts ...

func exchange<T>(data:[T], i:Int, j:Int)
{
let temp = data[i];
data[i] = data[j];
data[j] = temp;
}

Playgrounds 告诉我:

错误:@lvalue $T8 与 T 不同。

如何更改它才能使其正常工作?

最佳答案

Swift 中的数组是值类型。这意味着 data 在传递给您的 exchange 方法时被复制,但您正试图修改副本以影响原始版本。相反,您应该做以下两件事之一:

1。将 data 定义为 inout 参数:

func exchange<T>(inout data:[T], i:Int, j:Int)

然后在调用它的时候你必须在调用之前添加一个&:

var myArray = ["first", "second"]
exchange(&myArray, 0, 1)

2。返回数组的副本(推荐)

func exchange<T>(data:[T], i:Int, j:Int) -> [T]
{
var newData = data
newData[i] = data[j]
newData[j] = data[i]
return newData
}

我推荐这种方式而不是 in-out 参数,因为 in-out 参数会创建更复杂的状态。您有两个变量指向并可能操纵同一 block 内存。如果 exchange 决定在单独的线程上完成它的工作怎么办?还有一个原因是 Apple 决定制作数组值类型,使用 in-out 颠覆它。最后,返回副本更接近 Functional Programming这是 Swift 可以推进的一个有前途的方向。我们的应用程序中的状态越少,我们产生的错误就越少(通常)。

关于arrays - Swift 通用数组 'not identical' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24784252/

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