无法将类型 'UIView' (0x112484eb0) 的值转换为 'SKView' (0x111646718)

Could not cast value of type 'UIView' (0x112484eb0) to 'SKView' (0x111646718)

无法将类型 'UIView' (0x112484eb0) 的值转换为 'SKView' (0x111646718)。我不断收到此错误。任何人都可以帮助我,因为默认情况下代码行就在那里。我使用 xcode 7 beta 将 SK 游戏转换为最新的 swift 语法。编译器遗漏了很多东西,这就是为什么我回到 xcode 6。我没有红色错误;但是,游戏崩溃并显示线程 1:SIGARBT 信号。关于 swift 2 和最新版本 swift 1 之间的变化的任何提示,这些变化可能会导致在转换为最新的 swift 语法时出现问题。也许我应该在 xcode 6.3.2 中更改一些已转换的内容。一旦崩溃问题得到解决,我将删除测试版。代码中可能有错误,因为当我将代码复制到一个全新的 xcode 项目时,我遇到了同样的错误。 提前致谢!

let skView = self.view as! SKView

转到您的 Storyboard,select 包含 SpriteKit 游戏的 UIViewController,以及 select 左侧菜单中的视图:

现在转到 Identity Inspector 并确保 Class 是 SKView 而不是 UIView:

您现在应该能够从您的 UIViewController:

编译这部分代码
// Configure the view.
SKView * skView = (SKView *)self.view;

或在Swift:

let skView = self.view as! SKView

我终于修好了!我没有将函数放在 GameViewController 中并从游戏场景中调用它们,而是不得不将函数放在 gameScene 中并用 self.view!.

替换视图

对于不想使用 Storyboard 的用户,您可以在 ViewControllerloadView 函数中简单地将视图创建为 SKView

class ViewController: UIViewController {
  override func loadView() {
    self.view = SKView()
  }

  override func viewDidLoad() {
    let skView = view as! SKView
    ...
  }
}

简单修复。您只需将您使用的每个视图控制器的视图从 UIView 更改为 SKView。