for循环中的额外数据

Extra data in a for loop

我正在尝试执行 for 循环以将一些数据附加到另一个数组。我的文件夹中只有 5 个项目,但它给了我 6 个项目。我不确定我的 for 循环要做什么。

我的代码是这样的:

// TextureAtlas been populated by the Images folder
    textureAtlas = SKTextureAtlas(named: "RockImages")

    // Adds the images from the textureAtlas to the textureArray in order
    for i in 0...textureAtlas.textureNames.count {
        let Name = "rock_\(i).png"
        textureArray.append(SKTexture(imageNamed: Name))
    }

这是我打印出 textureArray 时得到的结果:

解决眼前的问题

这就是您不应该手动写入索引范围的原因。

for i in 0...textureAtlas.textureNames.count

应该是

for i in 0..<textureAtlas.textureNames.count

如果您只使用

,则可以完全避免发生此错误的可能性
for i in textureAtlas.textureNames.indices

但还有更好的方法

您已经有了可用的纹理名称。无需获取索引,手动将它们转换为带有 let name = "rock_\(i).png" 的名称。只要做:

for name in textureAtlas.textureNames {
    textureArray.append(SKTexture(imageNamed: Name))
}

等等,还有更多!

您应该避免这种创建空数组并重复向其中添加元素的模式。这是很多样板代码,速度很慢,并且它要求您的数组是可变的,即使它不需要是可变的。请改用 map(_:)

let textureArray = textureAtlas.textureNames.map(SKTexture.init(imageNamed:))