self class来初始化控制器

时间:2016-05-24 09:44:47

标签: ios swift cocoa

我遇到了从obj-c转换代码的问题。

controller = [[[self class] alloc] initWithNibName:name bundle:nil];

我尝试过这样的事情

self.init(nibName: name, bundle: nil)

但它给了我一个错误:构造具有元类型值的类类型'BaseViewController'的对象必须使用'required'初始值设定项。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您需要在VC中添加初始化方法,如下所示:

required init(coder aDecoder: NSCoder!) {
    super.init(coder: aDecoder)
}

另请查看:

http://themainthread.com/blog/2014/08/initializing-view-controllers-in-swift.html

希望它会有所帮助:)

答案 1 :(得分:1)

Ronak指出你需要添加init(coder aDecoder: NSCoder!)方法。除此之外,您还需要添加init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?)方法。所以你的整体代码看起来像这样:

  class func customInitializer() -> ViewController {
    return self.init(nibName: nil, bundle: nil)
  }

  required override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
  }

  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
  }