如何在我的代码中解决“对'self'的重叠访问,但修改需要互斥访问;请考虑复制到本地变量”错误?

时间:2019-01-03 21:32:54

标签: ios swift xcode xcode10 swift4.2

我无法继续运行我的应用程序,也无法测试运行它,因为我的代码中有一些错误,我不知道如何解决! 这是代码:

db.collection.aggregate([ 
  { $unwind: "$P.Workspaces" }, 
  { $match: { "P.Workspaces.Status":'something'}},
  { $group: { _id: "$P.Workspaces.Key", average: { $avg: "$P.Workspaces.Size" } } } 
  ])

1 个答案:

答案 0 :(得分:2)

问题在于数组是一种值类型,并且在修改一个元素时会更改整个数组。因此,您对customSwap()的调用会将两个引用传递给整个数组,从而导致对自身的重叠访问错误。

相反,您可以编写customSwap()来获取数组和要交换的索引的一个副本:

func customSwap<T>(_ array: inout [T], _ a: Int, _ b: Int) {
    let temp = array[a]
    array[a] = array[b]
    array[b] = temp
}

然后这样称呼它:

customSwap(&self, i, j)

但是您不必这样做,因为Array具有如下定义的内置swapAt(_:_)

 mutating func swapAt(_ i: Int, _ j: Int)

因此您可以将customSwap通话替换为:

self.swapAt(i, j)

但是Array具有内置的shuffle(),您可以调用它而不用自己实现。