我希望从UIViewController类型创建一个具体类,类似这样
func create(with type : UIViewController.Type)->UIViewController{
return type.init(coder: NSCoder())!
}
显然,UIViewController的指定初始化程序只是init(编码器:NSCoder)。而且,当我尝试传入NSCoder()时(如上例所示),应用程序崩溃了。
任何人都知道从其类型创建UIViewController具体类的更好的解决方案?或者我在这种情况下通过了错误的NSCoder?
代码完成不显示此选项,但这会编译并运行没有问题:
func create(with type : UIViewController.Type) -> UIViewController {
return type.init()
}
如果您只想以编程方式或从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
函数中做一些特别的事情,否则它就没有必要了。