问题
我先定义了一个BaseViewController类,在StoryBoard中也画了一个BaseViewController控制器。我用代码
storyboard.instantiateViewController(withIdentifier: "BaseViewController") as! BaseViewController
可以很容易的生成BaseViewController实例。
但是我后来由于新的需求,又定义了SubClassViewController,继承BaseViewController,我希望能够复用StoryBoard中的视图控制器,不用在StoryBoard中画两个一样的控制器,这样节省维护成本。如何解决呢?
解决方法
如果直接强制转换是不可以的,Xcode会报错,那要如何做到呢?
很简单,使用Swift的动态特性,在生成BaseViewController实例后,做一次子类的转换,就完成了!代码如下:
let viewController = storyboard.instantiateViewController(withIdentifier: "BaseViewController") as! BaseViewController
object_setClass(viewController, SubClassViewController.self)
let subClassViewController = viewController as! SubClassViewController
好了,问题解决了。
网友评论