Будучи новичком в 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), поэтому я могу легко ее использовать.