Pola Koordinator di iOS
Halo teman-teman!
Apa itu koordinator?
Koordinator adalah komponen sistem yang memegang logika navigasi aplikasi. Pola tersebut diperkenalkan oleh Soroush Khanlou .
Mengapa kita membutuhkan seorang koordinator?
Manfaat menggunakan pola koordinator adalah kita menghilangkan tanggung jawab navigasi dari pengontrol. Dengan cara ini kami dapat meningkatkan kegunaannya kembali juga kami dapat memiliki navigasi aplikasi di tempat terpusat, baik kami memiliki satu koordinator atau kami memiliki koordinator utama dengan anak-anak.
Memisahkan pengontrol tampilan dari navigasi aplikasi dapat meningkatkan keterbacaan proyek. Di aplikasi yang lebih besar, memiliki navigasi aplikasi di komponen sistem yang terpisah sangat penting, terutama jika ada tim fitur.
Tujuannya agar dapat mengubah navigasi logika dengan mudah tergantung situasi. Misalnya, pengguna yang berbeda dapat memiliki aliran yang berbeda atau pengguna iPad atau Pengujian A/B secara terpisah.
Ciri-ciri utama seorang Koordinator.
- Satu koordinator dapat memiliki banyak ViewController.
- Koordinator memiliki metode mulai di mana mereka menampilkan ViewController pada awalnya.
- ViewControllers memiliki referensi ke Koordinator.
- Koordinator memiliki susunan koordinator anak.
- Koordinator anak memiliki referensi ke orang tua mereka.
protocol Coordinator: AnyObject {
var childCoordinators: [Coordinator] { get set }
var navigationController: UINavigationController { get set }
func start()
}
final class AppCoordnator: Coordinator {
// 1
var childCoordinators = [Coordinator]()
// 2
var navigationController: UINavigationController
// 3
init(navigationController: UINavigationController) {
self.navigationController = navigationController
}
// 4
func start() {
let controller = StartViewController()
controller.coordinator = self
navigationController.pushViewController(controller, animated: true)
}
}
- Elemen UI tempat ViewController akan disematkan.
- Memasukkan elemen UI ke dalam konstruktor.
- Metode start adalah tempat inisialisasi ViewController dan koneksi dengan navigationController terjadi.
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// ...
let navigationController = UINavigationController()
let appCoordinator = AppCoordinator(navigationController: navigationController)
appCoordinator.applicationRunnerDelegate = self
appCoordinator.start()
window?.rootViewController = appCoordinator.navigationController
// ...
}
Koordinator dengan UITabBarController
Untuk memanfaatkan pola koordinator saat kita memiliki UITabBarController sebagai komponen UI utama aplikasi, kita harus membuat koordinator untuk setiap tab. Lihat contoh di bawah ini:
final class MainTabBarController: UITabBarController {
private let dashboardCoordinator: DashboardCoordnator
private let settingsCoordinator: SettingsCoordnator
init() {
self.dashboardCoordinator = DashboardCoordnator(navigationController: NavigationController())
self.settingsCoordinator = SettingsCoordnator(navigationController: NavigationController())
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// ...
viewControllers = [
makeDashboardCoordinator(),
makeSettingsCoordinator()
]
}
private func makeDashboardCoordinator() -> UINavigationController {
let tabImage = "dashboard_tab_icon"
let icon = UITabBarItem(title: "DASHBOARD",
image: UIImage(named: tabImage)?.withRenderingMode(.alwaysOriginal),,
selectedImage: UIImage(named: tabImage))
dashboardCoordinator.navigationController.tabBarItem = icon
dashboardCoordinator.start()
return dashboardCoordinator.navigationController
}
private func makeSettingsCoordinator() -> UINavigationController {
let tabImage = "settings_tab_icon"
let icon = UITabBarItem(title: "SETTINGS",
image: UIImage(named: tabImage)?.withRenderingMode(.alwaysOriginal),
selectedImage: UIImage(named: tabImage))
settingsCoordinator.navigationController.tabBarItem = icon
settingsCoordinator.start()
return settingsCoordinator.navigationController
}
}
Memisahkan logika navigasi dari ViewControllers meningkatkan kohesi kelas dan mengurangi pemasangan sistem. Menyimpan logika navigasi di tempat sentral dan meningkatkan kemampuan penggunaan kembali dan pengujian.
Untuk kritik dan saran atau apapun...
Mari terhubung:
Instagram:https://www.instagram.com/gvardikos/
Ditautkan:https://www.linkedin.com/in/george-vardikos-b0b199b0/
Email: [email protected]

![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































