ho un protocollo veloce che contiene una proprietà:Swift downcasting e di protocollo variabili
protocol WireframeProtocol: class
{
var rootViewController: UIViewController { get }
}
Ho poi ho una classe che implementa questo protocollo in quanto tale:
class MenuWireframe : WireframeProtocol
{
let rootViewController: UIViewController
init()
{
self.rootViewController = MenuViewController(nibName: "MenuViewController", bundle: nil)
(self.rootViewController as! MenuViewController).presenter = MenuPresenter(interactor: MenuInteractor())
}
}
Nella mia classe Wireframe la variabile è in realtà di tipo MenuViewController ma deve essere dichiarato come UIViewController per confermare il protocollo. Devo usare (self.rootViewController as! MenuViewController) per ridurlo alla classe corretta che voglio in modo da poter accedere alle sue proprietà. Va bene nel mio semplice esempio sopra, ma non è molto leggibile, specialmente in situazioni più complesse. C'è un modo migliore per dichiarare la variabile del protocollo?
Grazie mille!
Dal momento che si sta utilizzando VIPER, si potrebbe/dovrebbe dichiarare il vostro RootViewController come protocollo (il protocollo di vista), e definisce una proprietà debole, lì, che sarà il presentatore . –
Ciao Daniel, è vero, ma in questo caso è per uno scopo diverso. Desidero avere un protocollo conforme a tutti i wireframe che espone un UIViewController che posso utilizzare per scopi di navigazione. Suppongo che potrei ancora usare questo protocollo di visualizzazione per questo se il protocollo è solo per UIViewControllers ... mmm Lo controllerò e tornerò da te – bennythemink
@bennythemink hai controllato la mia risposta? –