如果要自定义UIViewController的初始化方法,比如在初始化的时候传入一个固定的参数。
- 1 在自定义的初始化方法中,一定要调用父类的 designated 初始化方法 即
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)
或
init?(coder aDecoder: NSCoder)
同时实现
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
方法,具体如下:
init(withCourseId cId: String) {
super.init(nibName: nil, bundle: nil)
courseId = cId
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
- 2 可以用convenience 标识,定义便利构造方法
convenience init(withCourseId cId: Any) {
self.init()
let courseIdStr = String(describing: cId)
courseId = courseIdStr
}
自我理解:
方法1 为自定义的指定构造器(即designated),根据语法的定义,指定构造器,一定要直接调用父类的指定构造器。
方法2 为自定义便利构造器(即convenience),根据语法定义,便利构造器必须调用同类中定义的其它构造器。便利构造器必须最终导致一个指定构造器被调用。所以方法2的实际调用过程如下
self.init -> self.init(nibName: nil, bundle: nil) -> super.init(nibName: nil, bundle: nil)
image.png
网友评论