来自Storyobard的特定ViewConrtoller实例化

问题描述 投票:-1回答:1

我有一个像这样的ViewModel专用ViewController:

final class MyViewConrtoller<MyViewModel>: UIViewController {
    var viewModel: MyViewModel?

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

我在InterfaceBuilder中设置ViewController的类型。然后,我尝试按以下方式实例化它:

guard let myViewController = UIStoryboard(name: "StoryboardName", bundle: nil).instantiateViewController(withIdentifier: "MyViewController") as? MyViewController<MyViewModel> else { return }

而且看起来强制转换失败。确实确实创建了一个实例(在强制转换之前),但是当它尝试强制转换时,将返回nil。

我有什么想念的吗?

swift generics storyboard interface-builder
1个回答
0
投票

如果您如下创建基类并在Storyboard中使用子类,该怎么办?

class MyBaseViewController<MyViewModel> : UIViewController {
    var viewModel: MyViewModel?
}

final class MyViewConrtoller: MyBaseViewController<MyViewModel> {
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

现在像这样使用它:

 private func LoadMyViewContrller() {
        guard let myViewController = UIStoryboard(name: "StoryboardName", bundle: nil).instantiateViewController(withIdentifier: "MyViewController") as? MyViewConrtoller else { return }

        myViewController.viewModel = yourViewModel
        myViewController.loadView()

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