Как запустить контроллер представления с пользовательскими параметрами, используя шаблон проектирования фабрики - PullRequest
1 голос
/ 10 октября 2019

Я пытаюсь запустить контроллер представления с параметрами, используя мой 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
        }
    }

Некоторые контроллеры представления должны быть созданы с использованием параметров. Как я могу реализовать это, используя мою фабрику? спасибо

1 Ответ

1 голос
/ 10 октября 2019

Извлечение аргумента, передаваемого во внешнюю часть функции с закрытием:

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
}

теперь за передачу аргументов отвечает тот, кто ожидает от фабрики.

...