简体   繁体   中英

How Coordinator can be made reusable? |Swift

I have application with TabBar (5 tabs) and I have created coordinator for each one(5 tabs = 5 coordinators). And also I have child coordinators. And some of the child coordinators should be used in main coordinators. How can I implement child coordinators to make it reusable?

MainCoordinator: Coordinator {
  var childCoordinator = [Coordinator]()
  var navController: UINavigatioController

  ...
  func buyCoordinator() {
    let child = BuyCoordinator()
    child.parent = self
  }
}
HomeCoordinator: Coordinator {
  var childCoordinator = [Coordinator]()
  var navController: UINavigatioController

  ...
  func buyCoordinator() {
    let child = BuyCoordinator()
    child.parent = self
  }
}
    |
    |
    V
 This is child coordinator

BuyCoordinator: Coordinator {
  weak var parent: MainCoordintor? <--- I've stucked here (I have two parents: HomeCoordinator and MainCoordinator)
  
}

You can't do that. The Coordinator Pattern relies on 1->N relationship. You can have one parent coordinator for N child coordinators. But YOU CAN'T HAVE ONE CHILD COORDINATOR TO N PARENT COORDINATOR BEING THE SAME CLASS.

For example:

MainCoordinator: Coordinator {
 var childCoordinator = [Coordinator]()
 var navController: UINavigatioController

 func buyCoordinator() {
  let child = BuyCoordinator()
  child.parent = self
 }
}

HomeCoordinator: Coordinator {
  var childCoordinator = [Coordinator]()
  var navController: UINavigatioController

func buyCoordinator() {
 let child = BuyCoordinator()
  child.parent = self
 }
}

BuyCoordinatorOne: Coordinator {
 weak var parent: MainCoordintor?
}

BuyCoordinatorTwo: Coordinator {
 weak var parent: HomeCoordinator?  
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM