我正在尝试使用Swift 4.2中可用的直接交换方法来交换存储模式数据的数组的值,但是它崩溃了。有人可以建议我为什么这不起作用吗?

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

我得到的错误是:

线程1:同时访问0x600001c4cb08,但进行了修改
需要独占访问权

当我跳到交换时,我得到了说它应该起作用的定义。请参考下图。

ios - 在Swift 4.2中交换数组值时检测到致命访问冲突-LMLPHP

最佳答案

尝试使用swapAt(_:_:)方法

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


关于您的为何不起作用的原因,不应在Mutable Collections上使用swap

Apple文档swap
这两个参数不能互为别名。要交换可变集合的两个元素,请使用该集合的swapAt(::)方法而不是此函数。

10-06 01:09