我希望通过UIViewController类型创建一个具体的类,
func create(with type : UIViewController.Type)->UIViewController{
return type.init(coder: NSCoder())!
}
显然,UIViewController的指定初始化程序仅是init(coder:NSCoder)。而且,当我尝试传递NSCoder()时(如上述情况所示),该应用程序崩溃了。
有人知道从其类型创建UIViewController具体类的更好解决方案吗?还是在这种情况下我传递了错误的NSCoder?
答案 0 :(得分:0)
代码完成不显示此选项,但是可以编译并运行,没有问题:
func create(with type : UIViewController.Type) -> UIViewController {
return type.init()
}
答案 1 :(得分:0)
如果您只是想以编程方式或通过XIB创建视图控制器,则只需使用基本构造函数即可。
let viewController = MyViewController()
如果您的XIB与该类具有相同的文件名,则它将自动加载它。
如果要从情节提要中加载它,则需要在情节提要中为视图控制器定义一个标识符,然后调用:
let storyboard = UIStoryboard(name: "storyboardName", bundle: nil)
storyboard.instantiateViewController(withIdentifier: "myViewControllerIdentifier")
编辑
如果您想要特殊的create
函数,则可以像这样为UIViewController
创建扩展名:
extension UIViewController {
static func create() -> Self {
return self.init()
}
}
然后您可以致电let myViewController = MyViewController.create()
。但是,除非您想在该create
函数中做一些特别的事情,否则它是不必要的。