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