問題
我先定義了一個BaseViewController類,在StoryBoard中也畫了一個BaseViewController控制器。我用代碼
storyboard.instantiateViewController(withIdentifier: "BaseViewController") as! BaseViewController
可以很容易的生成BaseViewController實例。
但是我后來由于新的需求,又定義了SubClassViewController,繼承BaseViewController,我希望能夠復用StoryBoard中的視圖控制器,不用在StoryBoard中畫兩個一樣的控制器,這樣節(jié)省維護成本。如何解決呢?
解決方法
如果直接強制轉(zhuǎn)換是不可以的,Xcode會報錯,那要如何做到呢?
很簡單,使用Swift的動態(tài)特性,在生成BaseViewController實例后,做一次子類的轉(zhuǎn)換,就完成了!代碼如下:
let viewController = storyboard.instantiateViewController(withIdentifier: "BaseViewController") as! BaseViewController
object_setClass(viewController, SubClassViewController.self)
let subClassViewController = viewController as! SubClassViewController
好了,問題解決了。