рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рд░реИрдкрд░реНрд╕ рдХреЛ рд╕рдордЭрдирд╛

рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╛рдареНрдпрдХреНрд░рдо "iOS рдбреЗрд╡рд▓рдкрд░" рдХреЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдЙрдиреНрдирдд рдкрд╛рдареНрдпрдХреНрд░рдо v 2.0ред тАЭ




рдкрд┐рдЫрд▓реЗ рд╣рдлреНрддреЗ рд╣рдордиреЗ рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрджреЛрдВ рдХреА рдПрдХ рдирдИ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╢реБрд░реВ рдХреАред рдЖрдЬ рдореИрдВ SwiftUI рдореЗрдВ рдкреНрд░реЙрдкрд░реНрдЯреА рд╡реНрд░реИрдкрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдХреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред SwiftUI рд╣рдореЗрдВ @State , @Binding , @ObservedObject , @EnvironmentObject рдФрд░ @Environment рд▓рд┐рдП рд░реИрдкрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рддреЛ, рдЖрдЗрдП рдЙрдирдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдХрдм, рдХреНрдпреЛрдВ рдФрд░ рдХрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реИрдкрд░


рдкреНрд░реЙрдкрд░реНрдЯреА рд░реИрдкрд░ (рдЗрд╕рдХреЗ рдмрд╛рдж "рдкреНрд░реЙрдкрд░реНрдЯреА рд░реИрдкрд░" рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд ) SE-0258 рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдЧреБрдгреЛрдВ рдХреЛ рд▓рдкреЗрдЯрдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХреЛрдб рдЖрдзрд╛рд░ рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд░рд╛рдЬреНрдп


@State рдПрдХ рдЖрд╡рд░рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдПрдХ View рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред SwiftUI рдЗрд╕реЗ View рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЗ рдмрд╛рд╣рд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЖрдВрддрд░рд┐рдХ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ред рдХреЗрд╡рд▓ рдПрдХ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ View рд╣реА рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред @State рд╕рдВрдкрддреНрддрд┐ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ, SwiftUI рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЦрд╛рддреЗ рдХреЛ View рд▓рд┐рдП рдкреБрди: рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИред

 struct ProductsView: View { let products: [Product] @State private var showFavorited: Bool = false var body: some View { List { Button( action: { self.showFavorited.toggle() }, label: { Text("Change filter") } ) ForEach(products) { product in if !self.showFavorited || product.isFavorited { Text(product.title) } } } } } 

рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмрдЯрди рдФрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рд╕реНрдХреНрд░реАрди рд╣реИред рдЬреИрд╕реЗ рд╣реА рд╣рдо рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рд░рд╛рдЬреНрдп рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ View рдмрдирд╛рддрд╛ рд╣реИред

@Binding


@Binding рдорд╛рди рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдХрднреА-рдХрднреА рд╣рдореЗрдВ рдЕрдкрдиреЗ View рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЙрд╕рдХреЗ рдмрдЪреНрдЪреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдорд╛рди рдХреЛ рдХреЗрд╡рд▓ рд▓реЗ рдФрд░ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рд╣реИ, рдФрд░ рд╕реНрд╡рд┐рдлреНрдЯ рдЗрд╕ рдореВрд▓реНрдп рдХреА рдПрдХ рдкреНрд░рддрд┐ рдкрд╛рд░рд┐рдд рдХрд░реЗрдЧреАред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ @Binding рд╕рдВрдкрддреНрддрд┐ рдХреА рд▓рдкреЗрдЯрди рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред

 struct FilterView: View { @Binding var showFavorited: Bool var body: some View { Toggle(isOn: $showFavorited) { Text("Change filter") } } } struct ProductsView: View { let products: [Product] @State private var showFavorited: Bool = false var body: some View { List { FilterView(showFavorited: $showFavorited) ForEach(products) { product in if !self.showFavorited || product.isFavorited { Text(product.title) } } } } } 

рд╣рдо @Binding showFavorited рдЕрдВрджрд░ showFavorited рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @Binding рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд▓рдВрдЧрд░ рд▓рд┐рдВрдХ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ $ рдЪрд░рд┐рддреНрд░ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ $ рд╕реНрд╡рд┐рдлреНрдЯ рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рд▓рдВрдЧрд░ рд▓рд┐рдВрдХ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдореВрд▓реНрдп рдХреА рдПрдХ рдкреНрд░рддрд┐ рдкрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ред FilterView рдореЗрдВ showFavorited рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкрдврд╝ рдФрд░ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА FilterView showFavorited рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдореВрд▓реНрдп showFavorited рд╣реИ, SwiftUI рдЕрдкрдиреЗ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ FilterView рдФрд░ FilterView рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддрд╛ рд╣реИред

@ObservedObject


@ObservedObject рд╕рдорд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХрдИ рд╕реНрд╡рддрдВрддреНрд░ View рдмреАрдЪ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЬреИрд╕реЗ рд╣реА рдкрд░рд┐рд╡рд░реНрддрди рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, SwiftUI рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рд╕рднреА рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ SwiftUI ред рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред

 import Combine final class PodcastPlayer: ObservableObject { @Published private(set) var isPlaying: Bool = false func play() { isPlaying = true } func pause() { isPlaying = false } } 

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

 struct EpisodesView: View { @ObservedObject var player: PodcastPlayer let episodes: [Episode] var body: some View { List { Button( action: { if self.player.isPlaying { self.player.pause() } else { self.player.play() } }, label: { Text(player.isPlaying ? "Pause": "Play") } ) ForEach(episodes) { episode in Text(episode.title) } } } } 

@EnvironmentObject


рдЕрдкрдиреЗ View рдХреА init рдкрджреНрдзрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ ObservableObject рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ View рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ Environment рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ, рд╣рдо рдЗрд╕ ObservableObject рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди Environment рд╕рднреА рдмрдЪреНрдЪреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдмрдирд╛рддреЗ рд╣реИрдВред

 class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { let window = UIWindow(frame: UIScreen.main.bounds) let episodes = [ Episode(id: 1, title: "First episode"), Episode(id: 2, title: "Second episode") ] let player = PodcastPlayer() window.rootViewController = UIHostingController( rootView: EpisodesView(episodes: episodes) .environmentObject(player) ) self.window = window window.makeKeyAndVisible() } } struct EpisodesView: View { @EnvironmentObject var player: PodcastPlayer let episodes: [Episode] var body: some View { List { Button( action: { if self.player.isPlaying { self.player.pause() } else { self.player.play() } }, label: { Text(player.isPlaying ? "Pause": "Play") } ) ForEach(episodes) { episode in Text(episode.title) } } } } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЕрдкрдиреЗ View рдХреЗ environmentObject рд╕рдВрд╢реЛрдзрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ PodcastPlayer рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ, рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ PodcastPlayer рдХреЛ @EnvironmentObject рд░реИрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред @EnvironmentObject Environment рдореЗрдВ PodcastPlayer рд╢реНрд░реЗрдгреА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рд╕рджрд╕реНрдп рдЦреЛрдЬ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ EpisodesView PodcastPlayer рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИред

@Environment


рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рдХрд╣рд╛ рдерд╛, рд╣рдо рдХрд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ SwiftUI рдХреЗ рдЕрдВрджрд░ Environment View рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди SwiftUI рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд┐рд╕реНрдЯрдо-рд╡рд╛рдЗрдб рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рднрд░рд╛ рдПрдХ Environment ред рд╣рдо @Environment рд░реИрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрди рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВред

 struct CalendarView: View { @Environment(\.calendar) var calendar: Calendar @Environment(\.locale) var locale: Locale @Environment(\.colorScheme) var colorScheme: ColorScheme var body: some View { return Text(locale.identifier) } } 

@Environment рд░реИрдкрд░ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдЧреБрдгреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдХреЗ, рд╣рдо рд╕рд┐рд╕реНрдЯрдо-рд╡рд╛рдЗрдб рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рддрдХ рдкрд╣реБрдВрдЪ рдФрд░ рд╕рджрд╕реНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЬреИрд╕реЗ рд╣реА рд▓реЛрдХреЗрд▓ , рдХреИрд▓реЗрдВрдбрд░ рдпрд╛ ColorScheme рд╕рд┐рд╕реНрдЯрдо рдмрджрд▓рддреЗ рд╣реИрдВ, SwiftUI рд╣рдорд╛рд░реЗ CalendarView рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддрд╛ рд╣реИред

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


рдЖрдЬ рд╣рдордиреЗ SwiftUI рджреНрд╡рд╛рд░рд╛ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдП рдЧрдП рд╕рдВрдкрддреНрддрд┐ рд░реИрдкрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреАред @State , @Binding , @EnvironmentObject рдФрд░ @ObservedObject SwiftUI рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреЗ рд╣реИрдВред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

Source: https://habr.com/ru/post/hi475078/


All Articles