在静态UIViewController方法中返回UIViewController子类的实例

时间:2019-01-12 17:10:30

标签: swift generics uiviewcontroller static storyboard

我正在寻找一种无需大量代码即可以编程方式实例化情节提要视图控制器的方法。

这是我方法的当前实现:

class Checkbox extends WebdriverIOWebElement {
    constructor() {
       super($('div'))
    }
    // overriding base method
    isDisplayed(): boolean {
        // blabla some new logic here
    }

    check() {
        if(!this.isChecked()) {
            this.click()
        }
    }

    uncheck() {
        if(this.isChecked()) {
            this.click()
        }
    }
}

此方法允许初始化视图控制器,如下所示:

extension UIViewController {

    static func instantiate<T: UIViewController>(_ viewController: T.Type) -> T {
        return UIStoryboard(name: "MainStoryboard", bundle: Bundle.main).instantiateViewController(withIdentifier: String(describing: viewController)) as! T
    }

}

可以,但是不理想。我希望直接在let signInVC = UIViewController.instantiate(SignInViewController.self) 的子类类型上运行instantiate()

UIViewController

不幸的是,即使我强制广播了代码,我编写的代码仍返回let signInVC = SignInViewController.instantiate() 的实例。

UIViewController

是否有一种方法可以根据泛型类型实现这种方法,而不必为每个单独的extension UIViewController { // This method returns an instance of UIViewController, despite the force downcast. static func instantiate<T: UIViewController>() -> T { return UIStoryboard(name: "MainStoryboard", bundle: Bundle.main).instantiateViewController(withIdentifier: String(describing: T.self)) as! T } } 子类都声明它?

0 个答案:

没有答案