【问题标题】:Simultaneous accesses to <Address>, but modification requires exclusive access同时访问<地址>,但修改需要独占访问
【发布时间】:2019-05-06 13:26:40
【问题描述】:

我想在函数myFunc 中指定用于操作的数组属性,但出现此错误。这是我的代码草图。

self.data = MyObject()

func myFunc(x: inout [Int], y: inout [[Int]]) {
    //manipulation code to x and y
}

myFunc(x: &self.data.array1, y: &self.data.array2)
myFunc(x: &self.data.array3, y: &self.data.array4)

知道如何让它工作吗?我应该为这个用例使用更好的模式吗?谢谢提前!

【问题讨论】:

  • 什么是self,什么是data?
  • data 是自定义类的实例

标签: swift4 shared-memory


【解决方案1】:

在 Swift 文档中进行了非常详尽的解释:

https://docs.swift.org/swift-book/LanguageGuide/MemorySafety.html

基本上,您威胁要同时以两种不同的方式对同一个对象进行变异/写入。这是不连贯的,如果编译器不阻止你,运行时就会阻止。

【讨论】:

  • 问题可能是 Swift 不能确定这些不是同一个数组。
  • 那么如何实现这个用例呢?
  • 不要使用 inout。
  • 所以我的错误是:我将 inout 与类实例一起使用。我很快就遇到了这个问题:链表反转按大小为 k 的组。
猜你喜欢
  • 2019-01-11
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 2019-10-28
  • 2018-02-17
  • 1970-01-01
  • 2018-01-07
相关资源
最近更新 更多