Можно ли создать категорию (расширение), которая в конечном итоге вернет объект, выделенный в instancetype
? У меня есть категория для загрузки файлов SKS, но поскольку эта категория предназначена для SKNode
, тогда все остальные подклассы, такие как SKScene
или SKEmitterNode
и т.д., Тоже будут ее использовать.
Поэтому я просто хотел бы избежать всегда отбрасывания от SKNode
до instancetype
. Можно ли изменить тип возврата на instancetype
и убедиться, что компилятор удовлетворен возвратным значением?
Я думаю, что могу использовать -> Self
как возвращаемый тип, но потом я понятия не имею, как отличить scene
от instancetype, чтобы эта вещь компилировалась..
Например:
SKEmitterNode.unarchiveFromFile("Blah")
возвращает экземпляр SKEmitterNode
extension SKNode {
class func unarchiveFromFile(file: String) -> SKNode {
let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks")
var sceneData = NSData.dataWithContentsOfFile(path, options: .DataReadingMappedIfSafe, error: nil)
let unarchiver = NSKeyedUnarchiver(forReadingWithData: sceneData)
unarchiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
let scene = unarchiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as SKNode
unarchiver.finishDecoding()
return scene
}
}