рд░рд╛рдЙрдЯрд░ рдФрд░ рдбреЗрдЯрд╛ рдкрд╛рд╕рд┐рдВрдЧ рдХреНрд▓реАрди рд╕реНрд╡рд┐рдлреНрдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░

рдирдорд╕реНрдХрд╛рд░ рдкрд╛рдардХ рдЬреА!

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдХреНрд▓реАрди рд╕реНрд╡рд┐рдлреНрдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╡реАрдЖрдИрдкреА рдЪрдХреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереАред рдЕрдм рд╣рдо рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╖рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рд╕реНрдкрд░реНрд╢ рдХрд░реЗрдВрдЧреЗ - рджреГрд╢реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХрд╛ рд╕рдВрдХреНрд░рдордг рдФрд░ рд╣рд╕реНрддрд╛рдВрддрд░рдг ред



рд╕рд┐рджреНрдзрд╛рдВрдд


рд░рд╛рдЙрдЯрд░ рдШрдЯрдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдФрд░ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рд▓реЙрдЬрд┐рдХ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬреЛ рджреГрд╢реНрдп рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ)ред рдпрд╣ рдЗрдВрдЯрд░рдПрдХреНрдЯрд░ рдФрд░ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде ViewController рдореЗрдВ рдЖрд░рдВрднреАрдХреГрдд рд╣реИред

рд░рд╛рдЙрдЯрд░ рджреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ - рд░реВрдЯрд┐рдВрдЧ рд▓реЛрдЬрд┐рдХ рдФрд░ рдбреЗрдЯрд╛рдкрд╛рд╕рд┐рдВрдЧ , рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рднрд░ рджреЗрдВрдЧреЗред рд░реВрдЯрд┐рдВрдЧ рд▓реЛрдЬрд┐рдХ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рджреГрд╢реНрдп рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рддрд░реАрдХреЗ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред DataPassing рдореЗрдВ рдЪрд░ dataStore рд╣реЛрддрд╛ рд╣реИ , рдЬреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ DataStore рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рджреГрд╢реНрдп рдбреЗрдЯрд╛рд╕реНрдЯреЛрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдЪрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд░рд╛рдЙрдЯрд░ рдореЗрдВ рд╣реА рдЗрд╕рдХреЗ рджреГрд╢реНрдп рдХреЗ ViewController рдХрд╛ рд▓рд┐рдВрдХ рд╣реЛрддрд╛ рд╣реИред

ViewController рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд░рд╛рдЙрдЯрд░ рджреГрд╢реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдХреВрджрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк Segue рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ рджреГрд╢реНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЖрдк рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗред рдХрд┐рд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╡реНрдпреВрдХреЛрдЯреНрд░реЙрд▓рд░ рд╡рд░реНрдЧ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕реНрд╡рд┐рдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

DataStore рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдПрдХ рджреГрд╢реНрдп рдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рдирд░ рд╕реЗ рдЙрд╕ рджреГрд╢реНрдп рдХреЗ рдЗрдВрдЯрд░рдПрдХреНрдЯрд░ рддрдХ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдо рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд░рд╛рдЙрдЯрд░ рд╣реИ рдЬрд┐рд╕реЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред

рдЕрднреНрдпрд╛рд╕


рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯрдлрд┐рд▓реНрдб рд╕реЗ рдЕрдиреНрдп рджреГрд╢реНрдп рдХреЗ рд▓реЗрдмрд▓ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП рджреГрд╢реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдХреЗ рджреЛ рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ - рд╕реЗрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдХ рд░реВрдк рд╕реЗред

рд░рд╛рдЙрдЯрд░ рд╡рд░реНрдЧ рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ 3 рд╢рдмреНрджрд╛рд░реНрде рд╕рдореВрд╣ рд╣реЛрддреЗ рд╣реИрдВ:

  1. рдЕрдиреБрдорд╛рд░реНрдЧрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рд╡рд┐рдзрд┐рдпрд╛рдБ
  2. рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рддрд░реАрдХреЗ (рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░реЗрдВ, рдмрд┐рдирд╛ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рд╕рдВрдХреНрд░рдордг)
  3. рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рддрд░реАрдХреЗ (рдкрд╛рд╕рдбрд╛рдЯрд╛, рдЕрдЧрд░ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╣реИ)



рдпрджрд┐ рд╣рдо рд╕реЗрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рдВрдХреНрд░рдордг рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдПрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ ViewController рдореЗрдВ рд╣рдореЗрдВ рддреИрдпрд╛рд░реА (: рдкреНрд░реЗрд╖рдХ :) рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЖрдкрдХреЛ рд░реВрдЯрд░ рд╕реЗ рд╕реЗрдЧ рдХреЗ рдирд╛рдо рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдУрд╡рд░рдбрд╛рдЗрдбрд┐рдВрдЧ рддреИрдпрд╛рд░реА (рдХреЗ рд▓рд┐рдП: рдкреНрд░реЗрд╖рдХ :) рд╕реЗрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рдЖрдк рдЗрд╕реЗ рдХреЛрдб рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ PerformSegue (withIdentifier: рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ :) рдХреЛ рд░рд╛рдЙрдЯрд░ рд╡рд┐рдзрд┐ рдореЗрдВ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреИрдпрд╛рд░реА рдХреЗрд╡рд▓ рддрднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд╕рд╛рде рд╣реА Segue рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред

final class HomeViewController: UIViewController {
// ...
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Segue
if let scene = segue.identifier {
// , Router
// router?.routeToNAME(segue:)
let selector = NSSelectorFromString("routeTo\(scene)WithSegue:")
// ,
// Segue
if let router = router, router.responds(to: selector) {
router.perform(selector, with: segue)
}
}
}
// ...
}


рдЕрдм рд╣рдо рдЖрдЦрд┐рд░рдХрд╛рд░ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдкрд░ рдЖрддреЗ рд╣реИрдВ - рд░рд╛рдЙрдЯрд░ рдХреЛрдбред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рдЗрд╕ рд░рд╛рдЙрдЯрд░ рдореЗрдВ, рд╣рдо рджреЛ рджреГрд╢реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ - рд╣реЛрдо рдФрд░ рдбрд┐рдЯреЗрд▓ ред рд╣реЛрдо рджреГрд╢реНрдп рд╕реЗ рд╕рдВрдХреНрд░рдордг рднреА рджреЛ рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╕реЗрдЧ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ред рдбреЗрдЯрд╛ рдХреЛ рд╣реЛрдо рд╕реАрди рд╕реЗ рдбрд┐рдЯреЗрд▓ рд╕реАрди рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд░реВрдЯрд┐рдВрдЧрд▓реЛрдЧрд┐рдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рд░реВрдЯрдЯреЙрдирд╛рдо рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд╣рд╛рдВ NAME рдЙрд╕ рд╕реАрдЧ (рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛) рдХрд╛ рдирд╛рдо рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рди рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рд╕реБрдВрджрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдмрд▓реНрдХрд┐ рддреИрдпрд╛рд░реА рдореЗрдВ рд╣рдорд╛рд░реЗ рд╡рд┐рдзрд┐ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рднреА рд╣реИ (рдХреЗ рд▓рд┐рдП: рдкреНрд░реЗрд╖рдХ :) ViewController , рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред

рд╕рд╛рде рд╣реА рд╣реЛрдорд░реВрдЯ рдХреНрд▓рд╛рд╕ рдореЗрдВ рднреА рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ рдиреЗрд╡рд┐рдЧреЗрдЯрдЯрд╛рдЙрди рдФрд░ рдкрд╛рд╕рдбреЗрдЯрд╛ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред рдкреВрд░реНрд╡ рд╕рдВрдХреНрд░рдордг рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ, рдЬрдмрдХрд┐ рдмрд╛рдж рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред рдпрджрд┐ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рдиреЗрд╡рд┐рдЧреЗрдЯрдЯреНрд░реЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд░реВрдЯрдЯреЗрдЯреЗрд▓ (segue :) рд╡рд┐рдзрд┐ рд╣реИред рд╕реЗрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рдЖрдкрдХреЛ Segue рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рдВрдХреНрд░рдордг рдХреЗ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдореЗрдВ рд╣рдорд╛рд░реЗ HomeViewController'a рдФрд░ HomeDataStore'a рд╣реЛрдо рджреГрд╢реНрдп рдХреЗ рдЧреИрд░-рд╡реИрдХрд▓реНрдкрд┐рдХ рдорд╛рди рдорд┐рд▓рддреЗ рд╣реИрдВ , рд╕рд╛рде рд╣реА ViewController рдФрд░ DataStore рдбрд┐рдЯреЗрд▓ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдВрдХ рднреА рдорд┐рд▓рддреЗ рд╣реИрдВ ред рдпрд╣рд╛рдВ рдпрд╣ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдбрд┐рдЯреАрдбреАрдПрд╕ рдПрдХ рдЪрд░ рд╣реИ рдФрд░ рдкрд╛рд╕- рджрд╛рддрд╛ рдкреИрд░рд╛рдореАрдЯрд░ (рдЗрди-рдЖрдЙрдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд╕рдбрд╛рдЯрд╛рдЯреЛрдбреЗрд▓ рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд┐рдирд╛ рдЗрдирд╡реЙрдЗрд╕ рдХреЗ, рд╣рдореЗрдВ рд╕рднреА DataStore рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ "рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ" (рдкреНрд░реЛрдЯреЛрдХреЙрд▓ DetailDataStore: class) рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдпрд╣ рдордЬрдмреВрдд рд▓рд┐рдВрдХ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рд╕рд╣рд┐рдд рдХрдИ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

import UIKit
/// @objc
/// prepare View Controller'e
@objc protocol HomeRoutingLogic {
/// Detail View Controller
func routeToDetail(segue: UIStoryboardSegue?)
}
protocol HomeDataPassing {
var dataStore: HomeDataStore? { get }
}
final class HomeRouter: NSObject, HomeRoutingLogic, HomeDataPassing {
// MARK: - Private
// MARK: - Public
weak var viewController: HomeViewController?
var dataStore: HomeDataStore?
// MARK: - HomeRoutingLogic
func routeToDetail(segue: UIStoryboardSegue?) {
if let segue = segue {
//
// Segue
// Detail View Controller
// Data Store Router'e
guard
let homeDS = dataStore,
let detailVC = segue.destination as? DetailViewController,
var detailDS = detailVC.router?.dataStore
else { fatalError("Fail route to detail") }
// , , ,
// ""
passDataToDetail(source: homeDS, destination: &detailDS)
} else {
// ,
// Segue
// Detail View Controller Storyboard'a
// Data Store Router'e
guard
let viewController = viewController,
let homeDS = dataStore,
let storyboard = viewController.storyboard,
let detailVC = storyboard.instantiateViewController(withIdentifier: "Detail") as? DetailViewController,
var detailDS = detailVC.router?.dataStore
else { fatalError("Fail route to detail") }
passDataToDetail(source: homeDS, destination: &detailDS)
// , ""
navigateToDetail(source: viewController, destination: detailVC)
}
}
// MARK: - Navigation
private func navigateToDetail(source: HomeViewController, destination: DetailViewController) {
source.navigationController?.pushViewController(destination, animated: true)
}
// MARK: - Passing data
/// destination inout,
/// Data Store
private func passDataToDetail(source: HomeDataStore, destination: inout DetailDataStore) {
// HomeDataStore DetailDataStore
destination.message = source.message
}
}


рдирд┐рд╖реНрдХрд░реНрд╖


рд╡рд╣ рд╕рдм рд╣реИред рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдпрджрд┐ рдЖрдк рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рд▓реЗрдЦ рдХреЛ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдиреАрдЪреЗ рдореИрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд▓рд┐рдВрдХ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред

рд▓реЗрдЦреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛


  1. рд╕реНрд╡рдЪреНрдЫ рд╕реНрд╡рд┐рдлреНрдЯ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЕрд╡рд▓реЛрдХрди
  2. рд╕реНрд╡рдЪреНрдЫ рд╕реНрд╡рд┐рдлреНрдЯ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рд░рд╛рдЙрдЯрд░ рдФрд░ рдбреЗрдЯрд╛ рдкрд╛рд╕рд┐рдВрдЧ (рдЖрдк рдпрд╣рд╛рдВ рд╣реИрдВ)
  3. рдХреНрд▓реАрди рд╕реНрд╡рд┐рдлреНрдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛
  4. рд╕реНрд╡рдЪреНрдЫ рд╕реНрд╡рд┐рдлреНрдЯ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг
  5. рдПрдХ рд╕рд░рд▓ рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреНрд▓реАрди рд╕реНрд╡рд┐рдлреНрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рд┐рдВрдХ
рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж: рдмрд╛рд╕реНрдЯрд┐рдпрди

Source: https://habr.com/ru/post/hi454032/


All Articles