This question already has answers here:
Is it possible to make an Array extension in Swift that is restricted to one class?

(4个答案)


5年前关闭。




对于Swift来说,我还很陌生,所以我决定考虑使用一种功能来扩展Array(或更具体地说是SKTexture的[SKTexture]数组),以从应用程序捆绑包中添加指定数量的帧。
// FRAMES
[email protected]
[email protected]
[email protected]
[email protected]

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

我的第一次尝试在下面列出,出现错误Cannot invoke 'append' with an argument list of type '(SKTexture!)'的原因是查看函数fuzzyPush,这是因为我试图附加SKTexture而不是通用T

这是可能的吗,还是我受到以下事实的限制:我不希望函数是通用的,而是特定于SKTexture数组。
extension Array {

    // ONLY SKTexture
    mutating func textureFromFrames(imageName: String, count: Int) {
        if !(self[0] is SKTexture) { return }
        for index in 1...count {
            let image = String(format: "\(imageName)_%04d", index)
            let texture = SKTexture(imageNamed: image)
            self.append(texture) // ERROR: Cannot invoke append with an argument list of type SKTexture!
        }
    }

    // WORKS FINE
    mutating func fuzzyPush(newItem: T) {
        self.append(newItem)
    }
}

我只是想知道是否可以使用扩展名进行操作,这不是问题,因为我将其作为一个带有3个参数(imageName,count,arrayToAppend)的函数,因此可以很容易地使用它。

最佳答案

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

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

关于ios - 扩展数组以附加SKTextures ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29944706/

10-09 16:26