Ini adalah salah satu pola desain paling populer dalam pemrograman cepat untuk menangani alur aplikasi.

Ini memecahkan masalah pemrograman di bawah ini di iOS.

  • Navigasi antara beberapa pengontrol tampilan
  • Transfer data antara beberapa pengontrol tampilan
  • Ini juga mengikuti pola yang solid.
  • Ini menghilangkan aliran layar berkode keras.
  • Bertanggung jawab untuk mendorong dan memunculkan layar
  • Memecahkan hubungan erat antara pengontrol tampilan

Mari kita lihat kode cara pembuatannya.

  • Pertama kita akan membuat protokol Koordinator.
  • chidCoordinator:Di sini childCoordinator akan membantu menumpuk semua pengontrol tampilan.
  • navigationController: Pengontrol navigasi akan bertindak sebagai navigasi awal aplikasi.
  • start(): Fungsi start akan berfungsi untuk menambahkan layar pertama ke jendela.
import Foundation
import UIKit

protocol Coordinator {
    var chidCoordinator: [Coordinator] { get set }
    var navigationController: UINavigationController { get set }
    func start()
}

Mari terapkan protokol koordinator. Ini kodenya.

import Foundation
import UIKit

class MainCoordinator: Coordinator {
    var navigationController: UINavigationController
    var chidCoordinator = [Coordinator]()
    init(navigationController: UINavigationController) {
        self.navigationController = navigationController
    }
    func start() {
        let viewController = ViewController.instantiate()
        viewController.mainCoordinator = self
        navigationController.pushViewController(viewController, animated: false)
    }
}

Kami akan menambahkan layar pertama ke jendela.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        let navigationController = UINavigationController()
        mainCoordinator = MainCoordinator(navigationController: navigationController)
        mainCoordinator?.start()
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.rootViewController = navigationController
        window?.makeKeyAndVisible()
        return true
}

Kami juga akan membuat StoryboardProtocol untuk memulai semua viewcontroller secara terprogram. Kami akan menggunakan kembali kode ini.

import Foundation
import UIKit

protocol StoryboardProtocol {
    static func instantiate() -> Self
}

extension StoryboardProtocol where Self: UIViewController {
    static func instantiate() -> Self {
        let viewControllerId = String(describing: self)        
        let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
        return storyboard.instantiateViewController(withIdentifier: viewControllerId) as! Self
    }
}

ViewController pertama akan terlihat seperti ini. Kita akan menambahkan 2 tombol lagi untuk melihat sehingga kita dapat menekan ke ViewContoller A dan ViewContoller b.

import UIKit

class ViewController: UIViewController, StoryboardProtocol {
    weak var mainCoordinator: MainCoordinator?
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    @IBAction func tapOnButtonA(_ sender: Any) {
        mainCoordinator?.goToViewControllerA()
    }
    @IBAction func tapOnButtonB(_ sender: Any) {
        mainCoordinator?.goToViewControllerB()        
    }
}

Saya telah menambahkan 2 fungsi goToViewControllerA() dan goToViewControllerB() lagi untuk berpindah ke pengontrol tampilan lainnya.

import Foundation
import UIKit

class MainCoordinator: Coordinator {
    var navigationController: UINavigationController
    var chidCoordinator = [Coordinator]()
    init(navigationController: UINavigationController) {
        self.navigationController = navigationController
    }
    func start() {
        let viewController = ViewController.instantiate()
        viewController.mainCoordinator = self
        navigationController.pushViewController(viewController, animated: false)
    }
    func goToViewControllerA () {
        let viewController = ViewControllerA.instantiate()
        viewController.mainCoordinator = self
        navigationController.pushViewController(viewController, animated: true)
    }
    func goToViewControllerB () {
        let viewController = ViewControllerB.instantiate()
        viewController.mainCoordinator = self
        navigationController.pushViewController(viewController, animated: true)
    }
}

Kode untuk ViewController A. Kode serupa adalah ViewController B.

import Foundation
import UIKit

class ViewControllerA: UIViewController, StoryboardProtocol {
    weak var mainCoordinator: MainCoordinator?
    override func viewDidLoad() {
        super.viewDidLoad()
        self.title = "View Controller A"
    }
}

Kami akan menghapus Antarmuka Utama Utamadi sini di target. Jadi kita bisa menjadikan viewController apa pun sebagai layar pertama. Jadi akan ada lebih banyak fleksibilitas untuk memilih layar mana yang akan didahulukan.

Seperti inilah tampilan storyboard kita.

Tutorial ini menunjukkan pengaturan awal untuk pola koordinator. Saya hanya menggunakan 1 Koordinator Utama di sini. Anda dapat menggunakan koordinator berbeda untuk setiap pengontrol tampilan. Saya harap Anda menyukai tutorialnya. Jangan ragu untuk menambahkan komentar.

Silakan suka dan berlangganan. Terima kasih