- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我无法继续使用我的应用程序,也无法测试运行它,因为我的代码中存在我不知道如何修复的错误!这是代码:
import Foundation
extension Array {
mutating func shuffle() {
if count < 2 { return }
for i in 0..<(count - 1) {
let j = Int(arc4random_uniform(UInt32(count - i))) + i
customSwap(a: &self[i], b: &self[j])
}
}
}
func customSwap<T>(a: inout T, b: inout T) {
let temp = a
a = b
b = temp
}
最佳答案
问题在于数组是一种值类型,当您修改一个元素时,您会更改整个数组。因此,您对 customSwap()
的调用传递了对整个数组的两个引用,这会导致 overlapping accesses to self 错误。
相反,您可以编写 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()
你可以直接调用而不是自己实现它。
关于ios - 如何修复 "Overlapping accesses to ' self',但修改需要独占访问;考虑在我的代码中复制到局部变量“错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54030090/
当我在其中一个扬声器上打开独占模式音频流时,会发出奇怪的嗡嗡声。这种嗡嗡声不会在我的其他设备上的相同条件下发生,也不会在一般的独占推送模式或共享模式下发生。 问题似乎是 WASAPI 将周期设置为比我
我的一个类中有一个 double 值,并且有一个上限。 问题是当我尝试将此变量设置为大于其限制的值时。当发生这种情况时,我想将其设置为限制内最接近的值。 当我尝试时,尴尬的情况发生了 .getLimi
我有锁定每个函数(某个库的)的代码,我想对其进行优化。给定函数A和B ,我不介意A与任何其他同时运行 A ,或任何 B与任何其他同时运行 B ,但没有A可以在任何 B 时运行正在运行,反之亦然。线程计
当 XML 必须根据 http://www.w3.org/TR/xml-exc-c14n/ 规范化时,下面的 XML 片段应该相等吗?(注意,. 字符代表一个 ' ' 空格) . ..data .
我想限制对整个应用程序的访问 /*但对于某些 Servlet 则不然。它们应该是公开的。 有没有一种方法可以轻松做到这一点(我想象有一些排除或可能覆盖?)或者我是否必须将文件排列在子文件夹中并允许访问
在一个 spring-mvc 项目中,我对索引/主页的内容进行了测试: @RunWith(SpringRunner.class) @SpringBootTest @AutoConfigureMockM
完全依赖 ARKit 自动平面检测是我不想做的事情,因为它需要时间来检测表面,然后现实生活中的表面应该有足够的纹理,因此我需要考虑一些事情提供一个选项,如果我愿意,我应该能够通过点击按钮随意添加 an
我是一名优秀的程序员,十分优秀!