/ / A következő módok visszatérésének általános módja: UIViewController, UINavigationController, UITabController - ios, iphone, gyors

Az alábbiak visszaküldésének általános módja: UIViewController, UINavigationController, UITabController - ios, iphone, gyors

Az alkalmazás dinamikusan módosíthatja az AppBaseControllert (bejelentkezés után). Ez a következő lehet:

Menüvezérlő (típus UIViewController), UINavigationController vagy UITabBarController

Ezt a vezérlőt gyárral hozom létre, és szeretném, ha a gyár megfelel egy ilyen protokollnak:

protocol MainRootApplication {
func create() -> UIViewController
}

2 példa a gyárról, amelyek megerősítik: (Automatikus befecskendezés Swinject használata függőségi injekcióhoz)

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)!
}
}

Mint látható, ez nem érhető el, mert a "MainTabBarController" nem az UIViewController típusú.

Akárhogy is, erre kényszerítés nélkül?

válaszok:

1 a válasz № 1

Lehet, hogy egy társított típust használ?

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

És akkor a gyárak olyanok lesznek, mint:

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)!
}
}

Kapcsolódó kérdések


Hozzászólások (0)

Hozzászólni