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

рд╕рд┐рджреНрдзрд╛рдВрдд
рд░рд╛рдЙрдЯрд░ рдШрдЯрдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдФрд░ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рд▓реЙрдЬрд┐рдХ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬреЛ рджреГрд╢реНрдп рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ)ред рдпрд╣ 
рдЗрдВрдЯрд░рдПрдХреНрдЯрд░ рдФрд░ 
рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде 
ViewController рдореЗрдВ рдЖрд░рдВрднреАрдХреГрдд рд╣реИред
рд░рд╛рдЙрдЯрд░ рджреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ - 
рд░реВрдЯрд┐рдВрдЧ рд▓реЛрдЬрд┐рдХ рдФрд░ 
рдбреЗрдЯрд╛рдкрд╛рд╕рд┐рдВрдЧ , рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рднрд░ рджреЗрдВрдЧреЗред 
рд░реВрдЯрд┐рдВрдЧ рд▓реЛрдЬрд┐рдХ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рджреГрд╢реНрдп рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рддрд░реАрдХреЗ рд╢рд╛рдорд┐рд▓ 
рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред 
DataPassing рдореЗрдВ рдЪрд░ 
dataStore рд╣реЛрддрд╛ рд╣реИ , рдЬреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ 
DataStore рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред 
рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рджреГрд╢реНрдп 
рдбреЗрдЯрд╛рд╕реНрдЯреЛрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдЪрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред 
рд░рд╛рдЙрдЯрд░ рдореЗрдВ рд╣реА рдЗрд╕рдХреЗ рджреГрд╢реНрдп рдХреЗ 
ViewController рдХрд╛ рд▓рд┐рдВрдХ рд╣реЛрддрд╛ рд╣реИред
ViewController рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, 
рд░рд╛рдЙрдЯрд░ рджреГрд╢реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдХреВрджрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк 
Segue рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ рджреГрд╢реНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЖрдк рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗред рдХрд┐рд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ 
рд╡реНрдпреВрдХреЛрдЯреНрд░реЙрд▓рд░ рд╡рд░реНрдЧ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕реНрд╡рд┐рдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
DataStore рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдПрдХ рджреГрд╢реНрдп рдХреЗ 
рдЗрдВрдЯрд░реИрдХреНрд╢рдирд░ рд╕реЗ рдЙрд╕ рджреГрд╢реНрдп рдХреЗ 
рдЗрдВрдЯрд░рдПрдХреНрдЯрд░ рддрдХ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдо рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ 
рд░рд╛рдЙрдЯрд░ рд╣реИ рдЬрд┐рд╕реЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред
рдЕрднреНрдпрд╛рд╕
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯрдлрд┐рд▓реНрдб рд╕реЗ рдЕрдиреНрдп рджреГрд╢реНрдп рдХреЗ рд▓реЗрдмрд▓ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП рджреГрд╢реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдХреЗ рджреЛ рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ - 
рд╕реЗрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдХ рд░реВрдк рд╕реЗред
рд░рд╛рдЙрдЯрд░ рд╡рд░реНрдЧ рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ 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 | 
|  | } | 
|  | } | 
рдирд┐рд╖реНрдХрд░реНрд╖
рд╡рд╣ рд╕рдм рд╣реИред рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдпрджрд┐ рдЖрдк рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рд▓реЗрдЦ рдХреЛ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдиреАрдЪреЗ рдореИрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд▓рд┐рдВрдХ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред
рд▓реЗрдЦреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛
- рд╕реНрд╡рдЪреНрдЫ рд╕реНрд╡рд┐рдлреНрдЯ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЕрд╡рд▓реЛрдХрди
- рд╕реНрд╡рдЪреНрдЫ рд╕реНрд╡рд┐рдлреНрдЯ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рд░рд╛рдЙрдЯрд░ рдФрд░ рдбреЗрдЯрд╛ рдкрд╛рд╕рд┐рдВрдЧ (рдЖрдк рдпрд╣рд╛рдВ рд╣реИрдВ)
- рдХреНрд▓реАрди рд╕реНрд╡рд┐рдлреНрдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛
- рд╕реНрд╡рдЪреНрдЫ рд╕реНрд╡рд┐рдлреНрдЯ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг
- рдПрдХ рд╕рд░рд▓ рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреНрд▓реАрди рд╕реНрд╡рд┐рдлреНрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рд┐рдВрдХрдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж: 
рдмрд╛рд╕реНрдЯрд┐рдпрди