简体   繁体   English

无法使用覆盖init方法调用类

[英]Can't invoke class with override init method

I'm trying to create a simple game from a tutorial but the code does not seem to be working, so I assume Swift itself has changed since it was written. 我正在尝试通过教程来创建一个简单的游戏,但是代码似乎无法正常工作,因此我认为自编写以来,Swift本身已经发生了变化。 I'm using XCode 7.3.1 with Swift 2.2. 我在Swift 2.2中使用XCode 7.3.1。

I'm creating a new class that inherits from SKScene and overrides the original init method: 我正在创建一个继承自SKScene并覆盖原始init方法的新类:

import SpriteKit

class BallScene: SKScene {
    override init (size: CGSize) {
        super.init(size: size)    
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

The GameViewController class fails to create an instance of the BallScene class and reports errors (marked *>): Can't invoke initializer for 'BallScene' with argument list of type '(size: CGSize, () -> () )' GameViewController类无法创建BallScene类的实例并报告错误(标记为*>):无法为参数类型为'(size:CGSize,()->())'的'BallScene'调用初始化程序

import UIKit
import SpriteKit

    class GameViewController: UIViewController {

        override func viewDidLoad() {
            super.viewDidLoad()

      *>      let scene = BallScene(size: view.bounds.size) {
                // Configure the view.
                let skView = self.view as! SKView
                skView.showsFPS = true
                skView.showsNodeCount = true
                skView.ignoresSiblingOrder = true
      *>         scene.scaleMode = .AspectFill
      *>         skView.presentScene(scene)
            }
        }
//more code
}

Obviously the argument type of the init is being rejected, yet all seems to be ok. 显然,init的参数类型被拒绝了,但是一切似乎都没问题。

Any ideas? 有任何想法吗?

Many thanks. 非常感谢。 Kw 功力

Not too sure what you are doing. 不太确定您在做什么。 Why do you have a {} braces after init-ing the BallScene . 初始化BallScene之后,为什么会有{}大括号。 I try your code, removing the {} works. 我尝试了您的代码,删除了{}工程。

class GameViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let scene = BallScene(size: view.bounds.size)
        // Configure the view.
        let skView = self.view as! SKView
        skView.showsFPS = true
        skView.showsNodeCount = true
        skView.ignoresSiblingOrder = true
        scene.scaleMode = .aspectFill
        skView.presentScene(scene)
    }
//more code
}

If this is not what you wanted, can you explain why you try to have a {} after init-ing BallScene ? 如果这不是您想要的,可以解释为什么在启动BallScene之后尝试使用{}吗?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM