Random 在Swift 3.0中,如何强制为数组中的每个元素生成随机数?

Random 在Swift 3.0中,如何强制为数组中的每个元素生成随机数?,random,swift3,arc4random,Random,Swift3,Arc4random,我在Swift 3.0生成随机数时遇到了一个奇怪的问题[在本例中是CGPoints]。我正在尝试构建一个非常简单的粒子过滤器,但我在使用下面的代码将所有粒子随机化时遇到了困难 当我在“粒子”集合中迭代时,会生成一个唯一的随机点[GOOD],但每个粒子都会得到完全相同的唯一随机点[BAD]。我不确定我做错了什么,以确保每个粒子得到一个唯一的随机点 有人对我如何强迫每个粒子获得唯一的随机点有什么建议吗 谢谢 斯坦 问题函数 func randomize( theListOfParticles

我在Swift 3.0生成随机数时遇到了一个奇怪的问题[在本例中是CGPoints]。我正在尝试构建一个非常简单的粒子过滤器,但我在使用下面的代码将所有粒子随机化时遇到了困难

当我在“粒子”集合中迭代时,会生成一个唯一的随机点[GOOD],但每个粒子都会得到完全相同的唯一随机点[BAD]。我不确定我做错了什么,以确保每个粒子得到一个唯一的随机点

有人对我如何强迫每个粒子获得唯一的随机点有什么建议吗

谢谢

斯坦

问题函数

func randomize(
    theListOfParticles: [RegionParticle]
    ) -> [RegionParticle] {

    var returnListOfParticles = [SRLSystemRegionParticle]()

    for particle in theListOfParticles {
        particle.position = self.randomPointInRegion()
        returnListOfParticles.append( particle )

    }
    return returnListOfParticles
}
辅助函数

/**
Get a random point in the region.
- Returns: CGPoint
*/
func randomPointInRegion() -> CGPoint {
    let x : CGFloat = Math.randomCGFloat(
        min: -(self.rect?.size.width)!,
        max: (self.rect?.size.width)!
    )
    let y : CGFloat = Math.randomCGFloat(
        min: -(self.rect?.size.width)!,
        max: (self.rect?.size.width)!
    )

    let returnCGPoint : CGPoint = CGPoint(
        x: x,
        y: y
    )
    return returnCGPoint
}
随机生成函数[在我所有数学函数的单独类中。]

/**
Generate a random CGFloat.
- Parameters:
- min: CGFloat
- max: CGFloat
- Returns: a CGFloat
*/
static func randomCGFloat( min: CGFloat, max: CGFloat) -> CGFloat {
    return CGFloat(Float(arc4random()) / Float(UINT32_MAX)) * (max - min) + min
}

好吧,我想我知道发生了什么

创建初始粒子阵列时,我使用了以下命令

    let newListOfParticles = Array(
        repeatElement(
            defaultParticle,
            count: self.numberOfParticles
        )
    )
我认为该函数将为每个索引生成defaultParticles的唯一副本。我错了

相反,函数只是创建了指向初始引用的引用。所以随机循环只是在同一个粒子上反复运行

我将列表初始化更改为以下内容:

    for _ in 1...self.numberOfParticles {

        newListOfParticles.append( RegionParticle( withRegion: self ) )

    }
所以现在每个条目都是唯一的,这似乎解决了问题

所以我只是部分疯了