首页 > 解决方案 > 返回类的动态类型的静态函数

问题描述

我正在遵循一个设计,其中每个视图控制器都是在自己的故事板上设计和配置的。例如MyViewController将被安置MyViewController.storyboard并分配标识符MyViewController。这种一致的命名允许我编写一个方便的扩展UIViewController

extension UIViewController {
    static func fromStoryboard(_ storyboard: UIStoryboard? = nil, identifier: String? = nil) -> UIViewController {
        let className  = NSStringFromClass(self).components(separatedBy: ".").last!
        let storyboard = storyboard ?? UIStoryboard(name: className, bundle: nil)
        let identifier = identifier ?? className

        return storyboard.instantiateViewController(withIdentifier: identifier)
    }
}

每当我需要控制器时,我都可以这样称呼它:

let vc = MyViewController.fromStoryboard() as! MyViewController

我的问题是:我怎样才能改变函数,以便我可以删除as!演员并仍然拥有vctype MyViewController?换句话说,我想做的是:

let vcA = ViewControllerA.fromStoryboard()  // vcA is of type ViewControllerA
let vcB = ViewControllerB.fromStoryboard()  // vcB is of type ViewControllerB

标签: swift

解决方案


推荐阅读