問題
我先定義了一個(gè)BaseViewController類,在StoryBoard中也畫了一個(gè)BaseViewController控制器。我用代碼
storyboard.instantiateViewController(withIdentifier: "BaseViewController") as! BaseViewController
可以很容易的生成BaseViewController實(shí)例。
但是我后來由于新的需求,又定義了SubClassViewController,繼承BaseViewController,我希望能夠復(fù)用StoryBoard中的視圖控制器,不用在StoryBoard中畫兩個(gè)一樣的控制器,這樣節(jié)省維護(hù)成本。如何解決呢?
解決方法
如果直接強(qiáng)制轉(zhuǎn)換是不可以的,Xcode會(huì)報(bào)錯(cuò),那要如何做到呢?
很簡(jiǎn)單,使用Swift的動(dòng)態(tài)特性,在生成BaseViewController實(shí)例后,做一次子類的轉(zhuǎn)換,就完成了!代碼如下:
let viewController = storyboard.instantiateViewController(withIdentifier: "BaseViewController") as! BaseViewController
object_setClass(viewController, SubClassViewController.self)
let subClassViewController = viewController as! SubClassViewController
好了,問題解決了。
最后
我的微博 @云峰筆記 簡(jiǎn)書 @陳云峰 多多關(guān)注,多提意見,互相學(xué)習(xí),互相進(jìn)步!