如果要自定義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)