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



我想在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调用中初始化。有人能解释一下我是如何做到这一点的吗?我确信我可以使我的数据属性是可选的,并在初始化后传入,但肯定有一种方法可以实现这一点。

如果您将data变量声明为非可选变量,则必须确保所有init方法都对其进行初始化

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

不会初始化您的data

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

最新更新