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来说,我还很陌生,所以我决定考虑使用一种功能来扩展
我的第一次尝试在下面列出,出现错误
这是可能的吗,还是我受到以下事实的限制:我不希望函数是通用的,而是特定于
我只是想知道是否可以使用扩展名进行操作,这不是问题,因为我将其作为一个带有3个参数(imageName,count,arrayToAppend)的函数,因此可以很容易地使用它。
(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