扩展数组以附加SKTextures

时间:2015-04-29 13:07:20

标签: ios swift sprite-kit sktexture

对Swift来说还是新手我决定使用一个函数来扩展Array(或更具体的[SKTexture]数组SKTexture),从应用程序包中添加指定数量的帧。

// FRAMES
FuzzyRabbit_0001@2x.png
FuzzyRabbit_0002@2x.png
FuzzyRabbit_0003@2x.png
FuzzyRabbit_0004@2x.png

// CALL
var rabbitTextures = [SKTexture]()
self.rabbitTextures.textureFromFrames("FuzzyRabbit", count: 4)

我的第一次尝试列在下面,我收到错误Cannot invoke 'append' with an argument list of type '(SKTexture!)',因为我试图追加fuzzyPush而不是通用{{} {1}} 1}}。

这是可能的,还是我受限于这样一个事实,即我不希望该函数是通用的,而是特定于SKTexture的数组。

T

我只是很好奇,如果这是我可以用扩展做的事情,它不是问题,因为我把它作为一个带3个参数的函数(imageName,count,arrayToAppend)所以我可以很容易地使用它。

2 个答案:

答案 0 :(得分:2)

今天无法写这个扩展名。您不能将扩展方法仅应用于某些类型的数组。

有两个好的解决方案。您可以通过创建包含TextureList的结构([SKTexture])来使用HAS-A模式,也可以使用函数。

答案 1 :(得分:1)

您可以替换:

self.append(texture)

self.append(texture as T)

我在一个字符串数组上检查了它,但它确实有效。 关于第一个检查添加另一个检查以查看该数组是否为空,否则self[0] is SKTexture将失败。

这是我在在线swift编译器上测试的代码(SKTexture显然不可用):

extension Array {

    mutating func textureFromFrames(imageName: String, count: Int) {
        for index in 1...count {
            let image = String(format: "\(imageName)_%04d", index)
            self.append(image as T) 
        }
    }
}


var arr = Array<String>()
arr.textureFromFrames("testing", count:4)

for tmp in arr {
    println("\(tmp)")
}