使用自定义初始值设定项swift以编程方式实例化和推送视图控制器

使用自定义初始值设定项swift以编程方式实例化和推送视图控制器,swift,uiviewcontroller,initialization,xib,Swift,Uiviewcontroller,Initialization,Xib,我想像这样在swift中展示一个细节视图控制器 let detailController = MyDetailUIViewController(nibName: "MyDetailUIViewController", bundle: NSBundle.mainBundle(), data:myData) self.navigationController?.pushViewController(detailController, animated:true) 我遇到的问题是如何为MyDetai

我想像这样在swift中展示一个细节视图控制器

let detailController = MyDetailUIViewController(nibName: "MyDetailUIViewController", bundle: NSBundle.mainBundle(), data:myData)
self.navigationController?.pushViewController(detailController, animated:true)
我遇到的问题是如何为MyDetailViewController编写初始值设定项:

class MyDetailUIViewController: UIViewController {

private var data: MyData

init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!, data:MyData) {
    self.data = data
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}

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

我得到一个错误,我的数据属性没有在super.init调用中初始化。有人能解释一下我是如何做到这一点的吗?我确信我可以将我的数据属性设置为可选,并在初始化后将其传入,但肯定有一种方法可以实现这一点。

如果您将
数据
变量声明为非可选,则必须确保所有
init
方法都对其进行初始化。你们班不是这样的,因为

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

不初始化
数据

如果将初始化声明为
便利初始化()
,则不必为
初始化(编码者:)
声明实现,这也可以解决您的问题

因此,我从中得到的好处是,考虑到实现init(coder-aDecoder:NSCoder!)的要求,我的数据属性必须是可选的?是的,这就是重点。如果无法将其初始化为空:
private var data:MyData=MyData()