我有一个像这样的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。
我有什么想念的吗?
如果您如下创建基类并在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()
}