从其类型创建UIViewController具体类

问题描述 投票:0回答:2

我希望从UIViewController类型创建一个具体类,类似这样

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

显然,UIViewController的指定初始化程序只是init(编码器:NSCoder)。而且,当我尝试传入NSCoder()时(如上例所示),应用程序崩溃了。

任何人都知道从其类型创建UIViewController具体类的更好的解决方案?或者我在这种情况下通过了错误的NSCoder?

ios swift
2个回答
0
投票

代码完成不显示此选项,但这会编译并运行没有问题:

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

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函数中做一些特别的事情,否则它就没有必要了。

© www.soinside.com 2019 - 2024. All rights reserved.