Вы можете использовать еще несколько обобщенных c, таких как фактический шаблонный код:
override func viewDidLoad() {
super.viewDidLoad()
if let view = self.view as! SKView? {
if let scene = SKScene(fileNamed: "GameScene") {
scene.scaleMode = .aspectFill
view.presentScene(scene)
}
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
}
Если все ваши сцены наследуются от SKScene, у вас не будет проблем.
Но если вам действительно нужно передать класс Type для загрузки функции, вы можете сделать что-то вроде этого:
func loadScene<T>(named name: String, classType: T.Type) -> T? {
return SKScene(fileNamed: name) as? T
}
И использовать:
let newScene = loadScene(named: "some", classType: GameScene.self)
// newScene is Optional(GameScene) type.
Конечно, вы можете удалить необязательную замену T?
и контролировать ноль нагрузки.