如果要自定義UIViewController的初始化方法,比如在初始化的時(shí)候傳入一個(gè)固定的參數(shù)。
- 1 在自定義的初始化方法中,一定要調(diào)用父類的 designated 初始化方法 即
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)
或
init?(coder aDecoder: NSCoder)
同時(shí)實(shí)現(xiàn)
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 標(biāo)識(shí),定義便利構(gòu)造方法
convenience init(withCourseId cId: Any) {
self.init()
let courseIdStr = String(describing: cId)
courseId = courseIdStr
}
自我理解:
方法1 為自定義的指定構(gòu)造器(即designated),根據(jù)語(yǔ)法的定義,指定構(gòu)造器,一定要直接調(diào)用父類的指定構(gòu)造器。
方法2 為自定義便利構(gòu)造器(即convenience),根據(jù)語(yǔ)法定義,便利構(gòu)造器必須調(diào)用同類中定義的其它構(gòu)造器。便利構(gòu)造器必須最終導(dǎo)致一個(gè)指定構(gòu)造器被調(diào)用。所以方法2的實(shí)際調(diào)用過(guò)程如下
self.init -> self.init(nibName: nil, bundle: nil) -> super.init(nibName: nil, bundle: nil)
image.png