根据其类型创建一个UIViewController具体类

时间:2018-09-18 08:45:38

标签: ios swift

我希望通过UIViewController类型创建一个具体的类,

 func create(with type : UIViewController.Type)->UIViewController{
       return type.init(coder: NSCoder())!
    }

显然,UIViewController的指定初始化程序仅是init(coder:NSCoder)。而且,当我尝试传递NSCoder()时(如上述情况所示),该应用程序崩溃了。

有人知道从其类型创建UIViewController具体类的更好解决方案吗?还是在这种情况下我传递了错误的NSCoder?

2 个答案:

答案 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函数中做一些特别的事情,否则它是不必要的。