Тъй като съм сравнително нов в 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), така че мога доста лесно да го използвам.