iOS'ta Koordinatör Kalıbı
Merhaba arkadaşlar!
koordinatör nedir?
Koordinatör, bir uygulamanın gezinme mantığını tutan bir sistem bileşenidir. Desen, Soroush Khanlou tarafından tanıtıldı .
Neden bir koordinatöre ihtiyacımız var?
Koordinatör kalıbını kullanmanın yararı, kontrolörlerden navigasyon sorumluluğunu kaldırmamızdır. Bu şekilde tekrar kullanılabilirliğini artırabiliriz, ayrıca uygulamanın navigasyonunu merkezi bir yerde tutabiliriz, ya bir koordinatörümüz var ya da çocuklarla birlikte bir ana koordinatörümüz var.
Görünüm denetleyicilerini uygulama gezintisinden ayırmak, projenin okunabilirliğini artırabilir. Daha büyük uygulamalarda, özellikle özellik ekipleri varsa, uygulamanın navigasyonunun sistemin ayrı bir bileşeninde olması çok önemlidir.
Amaç, duruma bağlı olarak mantığın navigasyonunu kolayca değiştirebilmektir. Örneğin, farklı kullanıcıların farklı akışları olabilir veya iPad kullanıcıları veya A/B Testi birbirinden bağımsız olabilir.
Bir Koordinatörün temel özellikleri.
- Bir koordinatörün birçok ViewController'ı olabilir.
- Koordinatörlerin, başlangıçta ViewController'ı görüntüledikleri bir başlatma yöntemi vardır.
- ViewControllers'ın bir Koordinatöre referansı vardır.
- Koordinatörün bir dizi alt koordinatörü vardır.
- Çocuk koordinatörlerin ebeveynlerine bir referansı vardır.
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)
}
}
- ViewControllers'ın katıştırılacağı UI öğesi.
- Yapıcıya UI öğesini enjekte etti.
- Start yöntemi, ViewController'ın başlatılmasının ve NavigationController ile bağlantının gerçekleştiği yerdir.
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
// ...
}
UITabBarController ile koordinatörler
Uygulamanın ana UI bileşeni olarak bir UITabBarController'a sahip olduğumuzda koordinatör modelinden faydalanmak için her sekme için bir koordinatör oluşturmalıyız. Aşağıdaki örneğe bakın:
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
}
}
Navigasyon mantığını ViewControllers'tan ayırmak, sınıf uyumunu artırır ve sistemin eşlenmesini azaltır. Navigasyon mantığını merkezi bir yerde tutar ve yeniden kullanılabilirliği ve test edilebilirliği geliştirir.
Her türlü görüş, öneri veya başka bir şey için...
Bağlanalım:
Instagram:https://www.instagram.com/gvardikos/
Linkedin:https://www.linkedin.com/in/george-vardikos-b0b199b0/
E-posta: [email protected]

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































