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

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