/ Vispārējs veids, kā atgriezties: UIViewController, UINavigationController, UITabController - ios, iphone, ātra

Vispārējs veids, kā atgriezties pie šādiem: UIViewController, UINavigationController, UITabController - ios, iphone, swift

Mana lietotne var dinamiski mainīt lietotni AppBaseController (tiek parādīta pēc pieteikšanās). Tas var būt šāds:

Izvēlnes kontrolieris (tips UIViewController), UINavigationController vai UITabBarController

Es izveidoju šo kontrolieri ar rūpnīcu un vēlētos, lai rūpnīca atbilstu protokolam, kas izskatās šādi:

protocol MainRootApplication {
func create() -> UIViewController
}

2 fabrikas paraugi, kas apstiprina: (Automātiskās ievades Swinject lietošana atkarības injekcijai)

class MenuControllerFactory: Factory,MainRootApplication {
func create() -> MenuController {
self.container.autoregister(MenuController.self, initializer: MenuController.init)
return self.container.resolve(MenuController.self)!
}
}

class MainTabBarControllerFactory: Factory, MainRootApplication {
func create() -> MainTabBarController {
self.container.autoregister(MainTabBarController.self, initializer: MainTabBarController.init)
return self.container.resolve(MainTabBarController.self)!
}
}

Kā redzat, to nevar paveikt, jo "MainTabBarController" nav UIViewController tipa.

Tas tomēr ir jādara bez spēka liešanas?

Atbildes:

1 atbilde Nr. 1

Varbūt izmantojiet saistīto veidu?

protocol MainRootApplication {
associatedtype ControllerType: UIViewController
func create() -> ControllerType
}

Un tad jūsu rūpnīcas būs kā:

class MenuControllerFactory: Factory,MainRootApplication {
typealias ControllerType = MenuController
func create() -> MenuController {
self.container.autoregister(MenuController.self, initializer: MenuController.init)
return self.container.resolve(MenuController.self)!
}
}

class MainTabBarControllerFactory: Factory, MainRootApplication {
typealias ControllerType = MainTabBarController
func create() -> MainTabBarController {
self.container.autoregister(MainTabBarController.self, initializer: MainTabBarController.init)
return self.container.resolve(MainTabBarController.self)!
}
}

Saistītie jautājumi


Komentāri (0)

Pievieno komentāru