Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SwiftBeta
Latest Apple Watch Apps Arquitecturas CallKit Combine Command Line Tool
El Libro de Swift Firebase Git Newsletter Patrones Peticiones HTTP Playgrounds Soft Skills
SPM Swift SwiftUI SwiftUI Intermedio Testing Threads Tools UIKit Vapor Vision Pro
VisionKit WWDC22 WWDC23 Xcode
SwiftBeta
2 ene. 2023
...
▶️¡Suscríbete al canal!
🤩 ¡Sígueme en Twitter!
📙 COMPRAR EL LIBRO DE SWIFT ⭐️
Coordinators
Vamos a continuar con nuestro proyecto, el que vimos en el anterior video.
Los coordinators son muy sencillos de implementar, y hoy vamos a ver un
ejemplo muy básico pero potente. Lo que vamos hacer es crear una carpeta
llamada Coordinators, y dentro de ella vamos a crear un fichero nuevo que
tendrá el siguiente protocolo:
import Foundation
import UIKit
protocol Coordinator {
var viewController: UIViewController? { get }
https://www.swiftbeta.com/arquitectura-model-view-controller-con-coordinators-en-swift/ 3/14
12/15/23, 7:27 PM Aprende a usar la Arquitectura Model-View-Controller con Coordinators en Swift
func start()
}
extension Coordinator {
var viewController: UIViewController? { nil }
var navigationController: UINavigationController? { nil }
}
MainCoordinator
Lo que vamos a crear ahora es un MainCoordinator. Es muy interesante por que
lo vamos a llamar cuando se ejecute nuestra app.
import Foundation
import UIKit
init(navigationController: UINavigationController) {
https://www.swiftbeta.com/arquitectura-model-view-controller-con-coordinators-en-swift/ 4/14
12/15/23, 7:27 PM Aprende a usar la Arquitectura Model-View-Controller con Coordinators en Swift
self.navigationController = navigationController
}
// code...
}
Creamos la implementación del método start que será el encargado de realizar la navegación
https://www.swiftbeta.com/arquitectura-model-view-controller-con-coordinators-en-swift/ 5/14
12/15/23, 7:27 PM Aprende a usar la Arquitectura Model-View-Controller con Coordinators en Swift
window?.rootViewController = navigationController
window?.makeKeyAndVisible()
}
}
https://www.swiftbeta.com/arquitectura-model-view-controller-con-coordinators-en-swift/ 6/14
12/15/23, 7:27 PM Aprende a usar la Arquitectura Model-View-Controller con Coordinators en Swift
PushCoordinator
Ahora vamos a añadir otro ViewController, vamos a crear una nueva clase
llamada CharacterDetailPushCoordinator
import Foundation
import UIKit
func start() {
https://www.swiftbeta.com/arquitectura-model-view-controller-con-coordinators-en-swift/ 7/14
12/15/23, 7:27 PM Aprende a usar la Arquitectura Model-View-Controller con Coordinators en Swift
https://www.swiftbeta.com/arquitectura-model-view-controller-con-coordinators-en-swift/ 8/14
12/15/23, 7:27 PM Aprende a usar la Arquitectura Model-View-Controller con Coordinators en Swift
ModalCoordinator
Imagina si es potente, que si ahora queremos presentar modalmente el
CharacterDetail, podemos crear el siguiente Coordinator, lo vamos a llamar
CharacterDetailModalCoordinator
import Foundation
import UIKit
func start() {
let characterDetailViewController = CharacterDetailViewControl
viewController?.present(characterDetailViewController, animate
}
}
https://www.swiftbeta.com/arquitectura-model-view-controller-con-coordinators-en-swift/ 9/14
12/15/23, 7:27 PM Aprende a usar la Arquitectura Model-View-Controller con Coordinators en Swift
https://www.swiftbeta.com/arquitectura-model-view-controller-con-coordinators-en-swift/ 10/14
Inyectar dependencias en el
12/15/23, 7:27 PM Aprende a usar la Arquitectura Model-View-Controller con Coordinators en Swift
CharactersListViewController
Quizás es pronto para hablar de esto, pero voy a empezar a introducirlo. A mi
me encanta sacar responsabilidades en clases, y que estas clases conformen
un protocolo, una interfaz o también lo puedes llamar contrato. De esta
manera, al crear los tests es muy fácil mockear (ojo que esto es un término
nuevo que aún no había sacado en el canal).
En el caso de la vistas, están en una clase aparte y podríamos hacer snapshots
tests directamente usando CharactersListView o CharacterDetailView (esto lo
veremos en próximos videos).
En CharactersListViewController podríamos dejar de usar el Storyboard, e
instanciar el ViewController con un init todas sus propiedades, de esta manera
podríamos inyectar mocks para nuestros tests. Pero no te preocupes, que esto
lo veremos en otros videos.
Conclusión
Hoy hemos aprendido a cómo usar el Patrón Coordinator dentro de la
arquitectura Model-View-Controller. Este Patrón nos permite extraer la
responsabilidad de navegación que añadiamos en nuestro ViewController para
navegar a otro. Esta responsabilidad está encapsulada dentro de un
Coordinator que se encarga de navegar a otras pantallas.
TE PODRÍA INTERESAR
https://www.swiftbeta.com/arquitectura-model-view-controller-con-coordinators-en-swift/ 11/14