Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用factory设计模式使用自定义参数初始化视图控制器_Ios_Swift_Design Patterns_Init - Fatal编程技术网

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之后调用函数