【问题标题】:Fatal access conflict detected when swapping array values in swift 4.2在 swift 4.2 中交换数组值时检测到致命的访问冲突
【发布时间】:2019-05-31 08:20:57
【问题描述】:

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

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

我得到的错误是:

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

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

【问题讨论】:

  • 实际上定义说它不会起作用,它还为您提供了另一种选择 - 请参阅 Joshua 的回答。
  • 为了进一步解释,因为 Apple 使用的术语可能并不完全清楚,短语“...不能相互别名”意味着它们不能指代相同的底层事物。这包括不在同一个集合中的元素。

标签: ios arrays swift swap


【解决方案1】:

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

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

关于为什么你的不起作用,swap 不应该用于可变集合。

swap 的 Apple 文档

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

【讨论】:

  • 这似乎也可以工作 (array[0], array[1]) = (array[1], array[0]) 尽管它不会利用 swapAt 可能可用的任何内部优化
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-02
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多