Swift中自定義寫(xiě)UIViewController的初始化方法

如果要自定義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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容