SwiftUI рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдореМрдЬреВрджрд╛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреЛ рдЕрдкрдирд╛рдирд╛ред рднрд╛рдЧ 4. рдиреЗрд╡рд┐рдЧреЗрд╢рди рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рд╕рдмрдХреЗ рд▓рд┐рдП рджрд┐рди рдЕрдЪреНрдЫрд╛ рд╣реЛ! рдЖрдк рдХреЗ рд╕рд╛рде рдореИрдВ, рдЕрдиреНрдирд╛ Zharkova, рдХреЗ рдПрдХ рдЕрдЧреНрд░рдгреА рдореЛрдмрд╛рдЗрд▓ рдбреЗрд╡рд▓рдкрд░ Usetechред
рдЕрдм SwiftUI, рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЗрдВ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рд╕реЗ рдЪреВрдХ рдЧрдП рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдпрд╣рд╛рдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ:

рднрд╛рдЧ 1
рднрд╛рдЧ 2
рднрд╛рдЧ 3

рджреГрд╢реНрдп рднрд╛рдЧ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдШреЛрд╖рдгрд╛рддреНрдордХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде, рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдирд┐рдпрдВрддреНрд░рдг рднреА рдмрджрд▓ рдЧрдпрд╛ рд╣реИред UIViewContoller рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕реАрдзреЗ рдирдХрд╛рд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; UINavigationController рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдиреЗрд╡реАрдЧреЗрд╢рди рд╡реНрдпреВ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

@available(iOS 13.0, OSX 10.15, tvOS 13.0, *)
@available(watchOS, unavailable)
public struct NavigationView<Content> : View where Content : View {

    public init(@ViewBuilder content: () -> Content)

    //....
}

рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ UINavigationController рдФрд░ рдЗрд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░ рдПрдХ рдЖрд╡рд░рдгред


рдореБрдЦреНрдп рд╕рдВрдХреНрд░рдордг рддрдВрддреНрд░ рдиреЗрд╡реАрдЧреЗрд╢рдирд▓рд┐рдВрдХ (рд╕реЗрдЧ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ) рд╣реИ, рдЬреЛ рддреБрд░рдВрдд рд╢рд░реАрд░ рдореЗрдВ рдХреЛрдб рджреЗрдЦреЗрдВред

public struct NavigationLink<Label, Destination> : View where Label : View, 
                                                                                           Destination : View {
.
    public init(destination: Destination, @ViewBuilder label: () -> Label)

    public init(destination: Destination, isActive: Binding<Bool>, 
                   @ViewBuilder label: () -> Label)

    public init<V>(destination: Destination, tag: V, selection: Binding<V?>,
                          @ViewBuilder label: () -> Label) where V : Hashable
//....
}

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

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



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

рдпрджрд┐ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░реАрди рдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдХреЛрдб рдмреЛрдЭрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

  NavigationView{
            NavigationLink(destination: ProfileView(), isActive: self.$isProfile) {
                Text("Profile")
            }
            NavigationLink(destination: Settings(), isActive: self.$isSettings) {
                           Text("Settings")
                       }
            NavigationLink(destination: Favorite(), isActive: self.$isFavorite) {
                Text("Favorite")
            }
            NavigationLink(destination: Login(), isActive: self.$isLogin) {
                Text("Login")
            }
            NavigationLink(destination: Search(), isActive: self.$isSearch) {
                Text("Search")
            }
}

рд╣рдо рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд┐рдВрдХ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- @ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рдирд▓рд┐рдВрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд┐рдпрдВрддреНрд░рдг

 NavigationLink(destination: ProfileView(), isActive: self.$isProfile) {
                Text("Profile")
            }

рдПрдХ рд╢рд░реНрдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд┐рдВрдХ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдирд┐рдпрдВрддреНрд░рдг (рд░рд╛рдЬреНрдп рдЪрд░)

       if self.isProfile {
            NavigationLink(destination: ProfileView()) {
                Text("Profile")
            }
}

рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рд╣рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рдЪрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рдХрд╛рдо рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдпрджрд┐ рд╣рдо 1 рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрддрд░ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдХрд╛рдо рд╣реИред

рд╕рдорд╛рди рддрддреНрд╡реЛрдВ рдХреА рд╕реВрдЪреА рдХреА рд╕реНрдХреНрд░реАрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдХреЙрдореНрдкреИрдХреНрдЯ рджрд┐рдЦрддрд╛ рд╣реИ:

 NavigationView{
        List(model.data) { item in
            NavigationLink(destination: NewsItemView(item:item)) {
            NewsItemRow(data: item)
            }
        }

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рдЪрд╛рд░ рд╕реВрдЪреА рд╣реИред рд╣рдо рдХрднреА рднреА рдПрдХ рдПрдХрд▓ рд╕рдорд╛рдЪрд╛рд░ рдЖрдЗрдЯрдо рдХреЗ рдПрдХ рд╕реНрдХреНрд░реАрди рдкрд░ рдирд╣реАрдВ рдЧрдП рд╣реИрдВ, рдФрд░ рдореЙрдбрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реА рд╕реНрдореГрддрд┐ рдореЗрдВ рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╣реИ:



рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рджреГрд╢реНрдп рд╢реВрдиреНрдп рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди UIHostingController рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

open class UIHostingController<Content> : UIViewController where Content : View {

    public init(rootView: Content)

    public var rootView: Content
//...
}

рдФрд░ рдпрд╣ UIViewController рд╣реИред рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рд╡рд░реНрддрдорд╛рди UI рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдирдП UIHostingController рдХреЗ рдЕрдВрджрд░ рдЕрдЧрд▓реЗ рджреГрд╢реНрдп рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЪрд▓реЛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рд╡реНрдпреВ рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗред

UIViewController рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд╛рд╡рд┐рдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ:

class Navigator {
    private init(){}
    
    static let shared = Navigator()
    
    private weak var view: UIViewController?
    
    internal weak var nc: UINavigationController?
        
   func setup(view: UIViewController) {
        self.view = view
    }
     
  internal func open<Content:View>(screen: Content.Type, _ data: Any? = nil) {
     if let vc = ModuleConfig.shared.config(screen: screen)?
        .createScreen(data) {
        self.nc?.pushViewController(vc, animated: true)
        }
   }

рдЙрд╕реА рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ, рд╣рдо рд╡рд┐рдиреНрдпрд╛рд╕рдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХ рдХрд╛рд░рдЦрд╛рдирд╛ рдмрдирд╛рдПрдВрдЧреЗ, рдЬреЛ рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕рдХ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдЧрд╛:

protocol IConfugator: class {
    func createScreen(_ data: Any?)->UIViewController
}

class ModuleConfig{
    private init(){}
    static let shared = ModuleConfig()
    
    func config<Content:View>(screen: Content.Type)->IConfugator? {
        if screen == NewsListView.self {
            return NewsListConfigurator.shared
        }
      // -
        return nil
    }
}

рдиреЗрд╡рд┐рдЧреЗрдЯрд░, рд╕реНрдХреНрд░реАрди рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ, рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реИ, рдпрд╣ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

class NewsListConfigurator: IConfugator {
    static let shared = NewsListConfigurator()
    
    func createScreen(_ data: Any?) -> UIViewController {
         var view = NewsListView()
        let presenter = NewsListPresenter()
         let interactor = NewsListInteractor()
        
        interactor.output = presenter
        presenter.output = view
        view.output = interactor
        
        let vc = UIHostingController<ContainerView<NewsListView>>
                    (rootView: ContainerView(content: view))
        return vc
    }
}

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдирдХрд░реНрддрд╛ UIViewController рдХреЛ рджреВрд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдиреЗрд╡рд┐рдЧреЗрдЯрд░ рд╣реИ рдФрд░ рд╕рд╛рдЭрд╛ рд╕реНрдЯреИрдХ рдкрд░ UINavigationController рдХреЛ рдзрдХреНрдХрд╛ рджреЗрддрд╛ рд╣реИред



рдиреЗрд╡рд┐рдЧреЗрдЯрд░ рдкрд░ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдиреЗрд╡рд┐рдЧреЗрдЯрд░ рдореЗрдВ рдмрджрд▓реЗрдВред рдЯреНрд░рд┐рдЧрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдПрдХ рдШрдЯрдирд╛ рд╣реЛрдЧреА:

  List(model.data) { item in
            NewsItemRow(data: item)
                .onTapGesture {
                Navigator.shared.open(screen: NewsItemView.self, item)
            }
        }

рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрдЯрд░ рдХреЛ рдЙрд╕реА рддрд░рд╣ рдХрд┐рд╕реА рднреА рд╡реНрдпреВ рдкрджреНрдзрддрд┐ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рд╕рд┐рд░реНрдл рд╢рд░реАрд░ рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВред

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



рдЕрдм рд╣рдорд╛рд░реЗ SwiftUI рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдХреЛрдб рд╕рд╛рдл рдФрд░ рд╕реБрдВрджрд░ рд╣реИред
рдЖрдк рдпрд╣рд╛рдВ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЕрдЧрд▓реА рдмрд╛рд░ рд╣рдо рд╕рдВрдпреЛрдЬрди рдХреЗ рдЧрд╣рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

All Articles