for循环中的额外数据

时间:2016-12-12 19:35:04

标签: swift for-loop textures

我正在尝试使用for循环将一些数据附加到另一个数组。我的文件夹中只有5个项目,但它给了我6个项目。我不知道该怎么做我的for循环。

enter image description here

我的代码是这样的:

// 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时得到的结果:

enter image description here

1 个答案:

答案 0 :(得分:3)

解决当前问题

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

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:))