SwiftUI рдореЗрдВ @EnvironmentObject рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдирд╛

рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдЙрдиреНрдирдд рдкрд╛рдареНрдпрдХреНрд░рдо "рдЖрдИрдУрдПрд╕ рдбреЗрд╡рд▓рдкрд░" рдХреЗ рд▓реЙрдиреНрдЪ рдХреА рдкреВрд░реНрд╡ рд╕рдВрдзреНрдпрд╛ рдкрд░ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред




рдирдорд╕реНрдХрд╛рд░ рдФрд░ рд╣рдорд╛рд░реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ! рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ, рд╣рдо рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдореЗрдВ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдХреИрд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░реЗрдВ (рдиреЗрд╡рд┐рдЧреЗрд╢рди рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛!)ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рддреБрдЪреНрдЫ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдФрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕рдордЭрдиреЗ рдкрд░, рд╣рдо рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП @ObservableObjectред рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ @EnvironmentObject рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрдЦреЗрдВрдЧреЗред рд╣рдо рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╕рдВрдХреНрд░рдордг рдПрдиреАрдореЗрд╢рди рдХреЛ рднреА рдЬреЛрдбрд╝рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

рдпрд╣рд╛рдБ рд╣рдо рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ:


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ


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

рд▓реЗрдХрд┐рди рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рддрд░реАрдХрд╛ рд╣реИ: рдЙрдкрдпреЛрдЧ @EnvironmentObject!

рд╕рдВрдХреЗрдд: рдЖрдк рдпрд╣рд╛рдВ рдирд╡реАрдирддрдо рдШрдЯрдирд╛рдХреНрд░рдо рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ "NavigateInwiftUIComplete" рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ) : HitHub

рдХреНрдпреЛрдВ рдЙрдкрдпреЛрдЧ ObservableObjectрд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ


рдЖрдк рд╢рд╛рдпрдж рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ: рд╣рдореЗрдВ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдХреНрдпреЛрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдорд╛рдзрд╛рди рд╣реИ? рдареАрдХ рд╣реИ, рдпрджрд┐ рдЖрдк рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рддрд░реНрдХ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╣рдорд╛рд░рд╛ MotherView рд░реВрдЯ рджреГрд╢реНрдп рд╣реИ рдЬреЛ ViewRouter рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИред MotherView рдореЗрдВ, рд╣рдо ContentViewA рдФрд░ ContentViewB рдХреЛ рднреА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ ViewRouter рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдПрдХ BindableObject рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

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



рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: ObservableObjectрдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреА рдмрд╛рдд рдЖрдиреЗ рдкрд░ рд╕реНрд╡рдЪреНрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

рдХреНрдпрд╛ рд╣реИ EnvironmentObject?


EnvironmentObjectрдПрдХ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд╣реИ, рдЬреЛ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рднреА рдЕрднреНрдпрд╛рд╡реЗрджрди рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬреЛ EnvironmentObjectрдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ObservableObject, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдкрдиреЗ ViewRouterрдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ EnvironmentObject!

рдЬреИрд╕реЗ рд╣реА рд╣рдордиреЗ рдЕрдкрдирд╛ рдШреЛрд╖рд┐рдд ViewRouterрдХрд┐рдпрд╛ EnvironmentObject, рд╕рднреА рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ObservableObject, рд▓реЗрдХрд┐рди рдЖрд╡реЗрджрди рдкрджрд╛рдиреБрдХреНрд░рдо рдиреАрдЪреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрд░рдореНрдн рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛!

рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕реЗ EnvironmentObjectрдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░рд╛ MotherView, рд░реВрдЯ рджреГрд╢реНрдп рдХреЗ рд░реВрдк рдореЗрдВ, рд╕рдВрдкрддреНрддрд┐ рдХреЛ рджреЗрдЦреЗрдЧрд╛ CurrentPage ViewRouter, рдЗрд╕рд▓рд┐рдП EnvironmentObjectрдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ред рддрдм рд╣рдо рдХрд░рдВрдЯрдкреЗрдЬ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВEnvironmentObjectрдХреА ContentViewрд╣реИ, рдЬреЛ рддрдм рдХреЙрд▓ MotherViewрдлрд┐рд░ рд╕реЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдПред



рдХреЗ ViewRouterрд░реВрдк рдореЗрдВ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрдиEnvironmentObject


рддреЛ, рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рдХреЛрдб рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ!

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЖрд╡рд░рдг рдмрджрд▓ viewRouterрдЕрдВрджрд░ MotherViewрд╕реЗ @ObservableObjectрдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @EnvironmentObjectред

import SwiftUI

struct MotherView : View {
@EnvironmentObject var viewRouter: ViewRouter
var body: some View {
//...
    }
}

рд╕рдВрдкрддреНрддрд┐ viewRouterрдЕрдм рд▓рдЧ рд░рд╣реА рд╣реИ ViewRouter-EnvironmentObjectред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ MotherView_PreviewsрдЙрдЪрд┐рдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ :

#if DEBUG
struct MotherView_Previews : PreviewProvider {
    static var previews: some View {
        MotherView().environmentObject(ViewRouter())
    }
}
#endif

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рдЗрд╕реЗ рддреБрд░рдВрдд ViewRouterрдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП EnvironmentObject, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ MotherViewрдЕрдм рд░реВрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ EnvironmentObjectред рдЗрд╕рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рджреГрд╢реНрдп рдлрд╝рдВрдХреНрд╢рди SceneDelegage.swiftрдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ :

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            window.rootViewController = UIHostingController(rootView: MotherView().environmentObject(ViewRouter()))
            self.window = window
            window.makeKeyAndVisible()
        }
    }

рдорд╣рд╛рди, рдЕрдм рдЬрдм рдЖрдк рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ SwiftUI ViewRouterрдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ EnvironmentObject, рдЬрд┐рд╕рд╕реЗ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд╕рднреА рд╡рд┐рдЪрд╛рд░ рдЕрдм рд╕рдВрд▓рдЧреНрди рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░рд╛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ ContentViewAред рдЗрд╕рдХреА viewRouterрд╕рдВрдкрддреНрддрд┐ рдмрджрд▓реЗрдВ EnvironmentObjectрдФрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рднреА рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ ContentViewA_Previewsред

import SwiftUI

struct ContentViewA : View {
    
    @EnvironmentObject var viewRouter: ViewRouter
    
    var body: some View {
       //...
    }
}
#if DEBUG
struct ContentViewA_Previews : PreviewProvider {
    static var previews: some View {
        ContentViewA().environmentObject(ViewRouter())
    }
}
#endif

рд╕рдВрдХреЗрдд: рдлрд┐рд░ рд╕реЗ, рд╕рдВрд░рдЪрдирд╛ ContentViewsA_PreviewsрдХрд╛ рдЕрдкрдирд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ ViewRouter, рд▓реЗрдХрд┐рди ContentViewAрдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдпрд╣ рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ!

рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдПрдВ ContentViewB:

import SwiftUI

struct ContentViewB : View {
    
    @EnvironmentObject var viewRouter: ViewRouter
    
    var body: some View {
        //...
    }
}
#if DEBUG
struct ContentViewB_Previews : PreviewProvider {
    static var previews: some View {
        ContentViewB().environmentObject(ViewRouter())
    }
}
#endif

рдЪреВрдВрдХрд┐ viewRouterрд╣рдорд╛рд░реЗ рдЧреБрдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ ContentViewрдЕрдм рд╕реАрдзреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд / рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкрд╛рд▓рди ViewRouterрдХреЗ рд░реВрдк рдореЗрдВ EnvironmentObject, рд╣рдо рдЕрдм рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░рд╛ рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ MotherViewред рддреЛ, рдЪрд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рд╣рдорд╛рд░рд╛ MotherView:

struct MotherView : View {
    
    @EnvironmentObject var viewRouter: ViewRouter
    
    var body: some View { 
        VStack {
            if viewRouter.currentPage == "page1" {
                ContentViewA()
            } else if viewRouter.currentPage == "page2" {
                ContentViewB()
            }
        }
    }
}

рдпрд╣ рд╕рд┐рд░реНрдл рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ: рд╣рдореЗрдВ рдЕрдм ViewRouterрд╣рдорд╛рд░реЗ рдЕрдВрджрд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ MotherViewрдФрд░ рдЗрд╕рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ ContentView рдХреЗ рдкрд╛рд╕ рднреЗрдЬ рджреЗрдВ, рдЬреЛ рдмрд╣реБрдд рд╣реА рдХреБрд╢рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкрджрд╛рдиреБрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдПред

рдорд╣рд╛рди, рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдПрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


рдорд╣рд╛рди, рд╣рдо рдЕрднреА рднреА рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ!

рд╕рдВрдХреНрд░рдордг рдПрдирд┐рдореЗрд╢рди рдЬреЛрдбрд╝рдирд╛


рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ "рдкреЗрдЬ 1" рд╕реЗ "рдкреЗрдЬ 2" тАЛтАЛрдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╕рдВрдХреНрд░рдордг рдПрдиреАрдореЗрд╢рди рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред

SwiftUI рдореЗрдВ, рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред
рдХреЛ рджреЗрдЦреЛ willChangeрд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ ViewRouter.swiftрдЬрдм CurrentPageрдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ, рдпрд╣ MotherViewрдЖрдкрдХреЗ рд╢рд░реАрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдВрдзрди рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ , рдЕрдВрддрддрдГ рдПрдХ рдФрд░ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ ContentView, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдирд╛ ContentViewред рд╣рдо willChangeрдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд┐рдзрд┐ рдХреЛ рд▓рдкреЗрдЯрдХрд░ рдПрдиреАрдореЗрд╢рди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ withAnimation:

var currentPage: String = "page1" {
        didSet {
            withAnimation() {
                willChange.send(self)
            }
        }
    }

рдЕрдм рд╣рдо рджреВрд╕рд░реЗ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╕рдВрдХреНрд░рдордг рдПрдиреАрдореЗрд╢рди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ Content Viewред
"WithAnimation (_: _ :) - рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдПрдиреАрдореЗрд╢рди рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рдирд┐рдХрд╛рдп рдХреЗ рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ"
Apple
рд╣рдо рдЬрдм рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдПрдХ рдкреЙрдк-рдЕрдк рд╕рдВрдХреНрд░рдордг рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ContentViewAрдХреЗ рд▓рд┐рдП ContentViewBред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛рдПрдВ MotherView.swiftрдФрд░ рдЬрдм рдХрд╣рд╛ рдЬрд╛рдП рддреЛ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рд╕рдВрд╢реЛрдзрдХ рдЬреЛрдбрд╝реЗрдВ ContentViewBред рдЖрдк рдХрдИ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдВрдХреНрд░рдордг рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрдиреНрдп рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ)ред рдкреЙрдк-рдЕрдк рд╕рдВрдХреНрд░рдордг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ .scaleред

var body: some View {
        VStack {
            if viewRouter.currentPage == "page1" {
                ContentViewA()
            } else if viewRouter.currentPage == "page2" {
                ContentViewB()
                    .transition(.scale)
            }
        }
    }

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдирд┐рдпрдорд┐рдд рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ рдЪрд▓рд╛рдПрдВ:


рдХреВрд▓, рд╣рдордиреЗ рдХреЛрдб рдХреЗ рдХреБрдЫ рд╣реА рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдВрдХреНрд░рдордг рдПрдиреАрдореЗрд╢рди рдЬреЛрдбрд╝рд╛!

рдЖрдк рдпрд╣рд╛рдБ рд╕рднреА рд╕реЛрд░реНрд╕ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ !

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


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



рдирд┐: рд╢реБрд▓реНрдХ рд╕рдмрдХ: "рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рддреЗрдЬреА рд╕реЗ рдЖрдИрдУрдПрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди"



All Articles