Ios 如何使用factory设计模式使用自定义参数初始化视图控制器
我正在尝试使用我的Ios 如何使用factory设计模式使用自定义参数初始化视图控制器,ios,swift,design-patterns,init,Ios,Swift,Design Patterns,Init,我正在尝试使用我的ViewControllerFactory初始化带有参数的视图控制器。问题是,我不知道将传递多少个参数以及它们是哪种类型 func createViewController<VC: UIViewController>(storyboardId: String?, vcType: UIViewController.Type,
ViewControllerFactory
初始化带有参数的视图控制器。问题是,我不知道将传递多少个参数以及它们是哪种类型
func createViewController<VC: UIViewController>(storyboardId: String?,
vcType: UIViewController.Type,
vcID: String) -> VC? {
if let storyboardId = storyboardId {
let storyboard = UIStoryboard(name: storyboardId, bundle: .main)
return storyboard.instantiateViewController(withIdentifier: vcID) as? VC
} else {
return vcType.init() as? VC
}
}
func createViewController(故事板ID:String?,
vcType:UIViewController.Type,
vcID:String)->VC?{
如果让故事板ID=故事板ID{
让storyboard=UIStoryboard(名称:storyboard ID,bundle:.main)
返回故事板。实例化EVEWController(标识符为vcID)为?VC
}否则{
将vcType.init()返回为?VC
}
}
某些视图控制器应使用参数进行实例化。我如何使用我的工厂实现它?
感谢使用闭包将提取参数传递到函数外部:
func createViewController<VC: UIViewController>(storyboardId: String?,
vcType: UIViewController.Type,
vcID: String,
setup: ((VC?)->())? = nil) -> VC? {
let vc: VC?
if let storyboardId = storyboardId {
let storyboard = UIStoryboard(name: storyboardId, bundle: .main)
vc = storyboard.instantiateViewController(withIdentifier: vcID) as? VC
setup?(vc)
} else {
vc = vcType.init() as? VC
}
return vc
}
func createViewController(故事板ID:String?,
vcType:UIViewController.Type,
vcID:String,
设置:((VC?->())?=nil)->VC?{
让vc:vc?
如果让故事板ID=故事板ID{
让storyboard=UIStoryboard(名称:storyboard ID,bundle:.main)
vc=故事板。实例化eviewController(标识符为vcID)为?vc
设置?(vc)
}否则{
vc=vcType.init()作为?vc
}
返回vc
}
现在,how nows what to expected from factory负责传递参数。我建议使用泛型类类型参数。在接收时,使用一个类似于任何类类型的变量,这是特定vc需要的。这不是我要求的,我希望执行init,而不是在init之后调用函数