При замене значений массива в swift 4.2 обнаружен фатальный конфликт доступа - PullRequest
2 голосов
/ 31 мая 2019

Я пытаюсь использовать метод прямого обмена, доступный в Swift 4.2, для обмена значениями массива, хранящего модальные данные, но он потерпел крах. Может кто-нибудь, пожалуйста, предложите мне, почему это не работает .?

   if modalArray.count >= 2{
            swap(&modalArray[0], &modalArray[1])
        }

Ошибка, которую я получил:

Поток 1: одновременный доступ к 0x600001c4cb08, но модификация требуется эксклюзивный доступ

Когда я прыгнул, чтобы поменяться, я получил определение, которое говорит, что оно должно работать. Обратитесь к изображению ниже.

enter image description here

1 Ответ

3 голосов
/ 31 мая 2019

Попробуйте использовать метод swapAt(_:_:)

if modalArray.count >= 2{
   modalArray.swapAt(0, 1)
}

Если ваш метод не работает, swap не следует использовать в изменяемых коллекциях.

Apple Doc для swap

Два аргумента не должны быть псевдонимами друг друга.Чтобы поменять местами два элемента изменяемой коллекции, используйте вместо этой функции метод swapAt (: :) этой коллекции.

...