Проблема в том, что массив является типом значения, и когда вы изменяете один элемент, вы изменяете весь массив.Таким образом, ваш вызов customSwap()
передается в двух ссылках на весь массив, что приводит к перекрывающемуся доступу к self error.
Вместо этого вы можете написать 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()
, который вы можете просто вызвать вместо того, чтобы реализовать его самостоятельно.