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

时间:2014-10-28 14:43:38

标签: swift uiviewcontroller initialization xib

我想像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调用时初始化。谁能解释我怎么能做到这一点?我确信我可以将我的数据属性设置为可选,并在初始化后传递给它,但肯定有办法让它工作。

2 个答案:

答案 0 :(得分:1)

如果您将data变量声明为非可选,则必须确保所有init方法都将其初始化。你的班级不是这种情况,因为

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

不会初始化您的data

答案 1 :(得分:0)

如果您将初始化声明为convenience init(),则无需为init(coder:)声明实施,这也可以解决您的问题。