UIViewController的子类所需的初始化器

我一直在试图按照关于创build一个容器视图控制器的教程。 它在Objective-C中。 我想把它转换成Swift。 我在这里发现了一些相同的问题,但是我没有从中得到太多的答案。

这是代码。

import UIKit class ContainerViewController: UIViewController { // Class "ContainerViewController" has no initializers - That I know why. // 'required' initializer 'init(coder:)' must be provided by a subclass of UIViewController var currentDetailViewController: UIViewController override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } 

我已经尝试了这两个错误说,但仍然无法正常工作。

问题是:如果您声明任何存储的属性没有初始值,您必须实现您自己的初始化程序来初始化它们。 看到这个文件 。

喜欢这个:

 var currentDetailViewController: UIViewController override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { currentDetailViewController = UIViewController() super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) } convenience override init() { self.init(nibName: nil, bundle: nil) } required init(coder aDecoder: NSCoder) { currentDetailViewController = UIViewController() super.init(coder:aDecoder) } 

但是,我认为这不是你想要的。

正确的解决scheme取决于你初始化currentDetailViewController

如果你总是在viewDidLoad初始化它,那么你可以声明它为“Implicitly Unwrapped Optional”

 var currentDetailViewController: UIViewController! override viewDidLoad() { super.viewDidLoad() self.currentDetailViewController = DetailViewController() } 

否则,如果currentDetailViewController可以是nil ,你应该声明它为“可选”

 var currentDetailViewController: UIViewController?