рд╕рдм рдХреБрдЫ рдЬреЛ рдЖрдк SwiftUI рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рд▓реЗрдХрд┐рди рдкреВрдЫрдиреЗ рд╕реЗ рдбрд░рддреЗ рдереЗ


рдирдорд╕реНрддреЗ! рдореЗрд░рд╛ рдирд╛рдо рд░реЗрдирд╛рдЯ рд╣реИ, рдореИрдВ iOS - Apphud рдореЗрдВ рдПрдХ рд╕рджрд╕реНрдпрддрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗрд╡рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, WWDC 2019 рдореЗрдВ Apple рдиреЗ рдЕрдкрдирд╛ рдирдпрд╛ SwiftUI рдврд╛рдВрдЪрд╛ рдкреЗрд╢ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ UIKit рдХреЛ рдмрджрд▓рдиреЗ (рдпрд╛ рдирд╣реАрдВ?) рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред SwiftUI рдЖрдкрдХреЛ рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рд╢реИрд▓реА рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдмрд╣реБрдд рдХрдо рдХрд░рддрд╛ рд╣реИред


Apple рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдЕрдВрдЧреНрд░реЗрдЬреА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкреЗрд╢ рдХрд┐рдП рд╣реИрдВред рдореИрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдФрд░ рдЙрддреНрддрд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирдП рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рддреЛ рдЪрд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВред


рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ


SwiftUI рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Xcode 11 рдмреАрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдкрдХреЛ рдПрдХ рдкрдВрдЬреАрдХреГрдд Apple рдбреЗрд╡рд▓рдкрд░ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдирд╡реАрдирддрдо macOS рдХреИрдЯрд╛рд▓рд┐рдирд╛ рд╣реЛрдирд╛ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдХреИрдирд╡рд╕ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдЧрд╛ред


рдЗрд╕рд▓рд┐рдП, Xcode 11 рдмреАрдЯрд╛ рдореЗрдВ, рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ "SwiftUI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдХреНрдпреВ рдПрдВрдб рдП


рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд┐рд▓реНрдбрд░ рдХрд╣рд╛рдБ рдЧрдпрд╛?


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


рдХреНрдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ?


рд╣рд╛рдВ, рдЕрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ UIWindow рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдирдП UIScene рд╡рд░реНрдЧ (рдпрд╛ рдЗрд╕рдХреЗ рд╡рдВрд╢рдЬ UIWindowScene ) рд╣реИрдВред рдФрд░ рджреГрд╢реНрдп рдореЗрдВ рдПрдХ рд╡рд┐рдВрдбреЛ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИред рдпреЗ рдмрджрд▓рд╛рд╡ рди рдХреЗрд╡рд▓ SwiftUI, рдмрд▓реНрдХрд┐ iOS 13 рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред


рдЬрдм рдЖрдк рдХреЛрдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ AppDelegate , SceneDelegate рдФрд░ ContentView рдлрд╛рдЗрд▓реЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреА ред SceneDelegate - UIWindowScene рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐, рдЬреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рджреГрд╢реНрдпреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред AppDelegate рдХреА рдЬреЛрд░рджрд╛рд░ рдпрд╛рдж рддрд╛рдЬрд╛ рдХрд░рддреА рд╣реИред


SceneDelegate рд╡рд░реНрдЧ Info.plist рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ
SceneDelegate рд╡рд░реНрдЧ Info.plist рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ


рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд┐рдзрд┐ scene: willConnectTo: options: рдПрдХ рд╡рд┐рдВрдбреЛ рдФрд░ рдПрдХ рд░реВрдЯ UIHostingController рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ UIHostingController рд╣реЛрддрд╛ рд╣реИред ContentView рд╣рдорд╛рд░рд╛ "рд╣реЛрдо" рдкреЗрдЬ рд╣реИред рд╕рднреА рд╡рд┐рдХрд╛рд╕ рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред


рдХреИрд╕реЗ рджреЗрдЦреЗрдВ UIView рд╕реЗ рдЕрд▓рдЧ рд╣реИ?


ContentView.swift рдЖрдк ContentView.swift рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ ContentView рдХрдВрдЯреЗрдирд░ рдШреЛрд╖рдгрд╛ рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдордЭ рдЪреБрдХреЗ рд╣реИрдВ, viewDidAppear viewDidLoad рдХреЛрдИ рдкрд░рд┐рдЪрд┐рдд viewDidAppear рдпрд╛ viewDidAppear рддрд░реАрдХреЗ рдирд╣реАрдВ рд╣реИрдВред рдпрд╣рд╛рдБ рд╕реНрдХреНрд░реАрди рдХрд╛ рдЖрдзрд╛рд░ UIViewController рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡реНрдпреВ рд╣реИ ред рдзреНрдпрд╛рди рджреЗрдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ ContentView рдПрдХ рдРрд╕реА struct рд╣реИ рдЬреЛ View рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИред рд╣рд╛рдВ, View рдЕрдм рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрди рдЧрдпрд╛ рд╣реИ, рдФрд░ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред ContentView рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЪрд░ body рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ body ред рдЖрдкрдХреЗ рд╕рднреА рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдФрд░ рдХрд╕реНрдЯрдо рджреГрд╢реНрдп рдХреЛ View рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд body рд╡реИрд░рд┐рдПрдмрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред


рд╢рд░реАрд░ рдХреНрдпрд╛ рд╣реИ?


Body рд╕реАрдзреЗ рд╣рдорд╛рд░реЗ рдХрдВрдЯреЗрдирд░ рд╣реИ рдЬрд╣рд╛рдВ рдЕрдиреНрдп рд╕рднреА рд╕рдмрд╡реНрдпреВ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ html рдкреЗрдЬ рдореЗрдВ рдмреЙрдбреА рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬрд╣рд╛рдВ html рдкреЗрдЬ рдПрдХ ContentView ред Body рд╣рдореЗрд╢рд╛ рдПрдХ рд╡рдВрд╢рдЬ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдХреЛрдИ рднреА рд╡рд░реНрдЧ рдЬреЛ View рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред


 struct ContentView: View { var body: some View { Text("Hello, world!") } } 

рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рдпрд╛ рдХреБрдЫ рдХреНрдпрд╛ рд╣реИ?


some TypeName рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдПрдХ рд╕реНрд╡рд┐рдлреНрдЯ 5.1 рдирд╡рд╛рдЪрд╛рд░ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдкрд╛рд░рджрд░реНрд╢реА рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИ, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, View рдкреНрд░реЛрдЯреЛрдХреЙрд▓ред


рдЕрдЧрд░ рд╣рдордиреЗ рдХреЗрд╡рд▓ var body: View рд▓рд┐рдЦрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ View рд▓реМрдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред Any рд╡рд░реНрдЧ рдпрд╛ рддреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдСрдкрд░реЗрд╢рди ( as! рдЖрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ) рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЕрдкрд╛рд░рджрд░реНрд╢реА рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдирд╛рдо рдХреЗ рд╕рд╛рдордиреЗ рд╡рд┐рд╢реЗрд╖ рд╢рдмреНрдж рдХреЗ рд╕рд╛рде рдЖрдПред View рдмрдЬрд╛рдп View рд╣рдо Text , Image , VStack - рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рднреА View рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рддрддреНрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдЬрдм рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ View рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ View рд╕рдВрдХрд▓рдХ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреЗрдЧрд╛ред



рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рддрддреНрд╡реЛрдВ рдХреЛ рд╢рд░реАрд░ рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐


рдХреЛрд╖реНрдардХ рдХреЗ рдЕрдВрджрд░ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХрд╣рд╛рдБ рд╣реИ AddSubview?


рд╕реНрд╡рд┐рдлреНрдЯ 5.1 рдиреЗ рд╕рдореВрд╣ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рд╢реИрд▓реА рдореЗрдВ рдПрдХ рдкреВрд░реЗ рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ред рдпрд╣ рдПрдХ рдХреНрд▓реЛрдЬрд░ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рддрддреНрд╡реЛрдВ рдХреЛ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдФрд░ рд╡рд╛рдкрд╕реА рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдирдИ рд▓рд╛рдЗрди рд╕реЗ рдПрдиреБрдорд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрдВрддреНрд░ рдХреЛ рдлрдВрдХреНрд╢рди рдмрд┐рд▓реНрдбрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред


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


 @available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *) @_functionBuilder public struct ViewBuilder { /// Builds an empty view from an block containing no statements, `{ }`. public static func buildBlock() -> EmptyView /// Passes a single view written as a child view (e..g, `{ Text("Hello") }`) through /// unmodified. public static func buildBlock<Content>(_ content: Content) -> Content where Content : View } 

SwiftUI рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ ViewBuilder рд╡рд┐рдЬреНрдЮрд╛рдкрди


UILabel, UIImageView рдФрд░ рдЕрдиреНрдп рддрддреНрд╡реЛрдВ рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ?


рддрддреНрд╡реЛрдВ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ View рдХреЛ рдПрдХ рдирдИ рдкрдВрдХреНрддрд┐ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдВрд╢реЛрдзрдХ рдлрд╝рдВрдХреНрд╢рди ( рджреГрд╢реНрдп рд╕рдВрд╢реЛрдзрдХ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░рд┐рдЪрд┐рдд рд╕рдВрд╢реЛрдзрдХреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рд╣рдореЗрд╢рд╛ void рдмрдЬрд╛рдп рдПрдХ рдХрдВрдЯреЗрдирд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдмрд┐рдВрджреБ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╢реЛрдзрдХ рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред


 var body: some View { VStack{ Text("World Time").font(.system(size: 30)) Text("Yet another subtitle").font(.system(size: 20)) } } 

рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рднреА рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рджреГрд╢реНрдп рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдореЗрдВ рдЙрдирдХреЗ рдПрдирд╛рд▓реЙрдЧ рдирд╣реАрдВ рд╣реИрдВред рдпрд╣рд╛рдБ UIKit рдФрд░ рдЙрдирдХреЗ рдПрдирд╛рд▓реЙрдЧреНрд╕ рдХреА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдЖрдВрд╢рд┐рдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ:


  • UITableView -> List


  • UICollectionView рдХрд╛ рдХреЛрдИ рдПрдирд╛рд▓реЙрдЧ рдирд╣реАрдВ рд╣реИ


  • UILabel -> Text


  • UITextField -> TextField


  • UIImageView -> Image


  • UINavigationController -> NavigationView


  • UIButton -> Button


  • UIStackView -> HStack / VStack


  • UISwitch -> Toggle


  • UISlider -> Slider


  • UITextView рдХрд╛ рдХреЛрдИ рдПрдирд╛рд▓реЙрдЧ рдирд╣реАрдВ рд╣реИ


  • UIAlertController -> Alert / ActionSheet


  • UISegmentedControl -> SegmentedControl


  • UIStepper -> Stepper


  • UIDatePicker -> DatePicker



рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ?


рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ NavigationView рдХреА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред рдХреЗрд╡рд▓ NavigationView{} рдореЗрдВ рдЕрдкрдирд╛ рдХреЛрдб рд▓рдкреЗрдЯреЗрдВред рдФрд░ рд╕рдВрдХреНрд░рдордг рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ NavigationLink рдмрдЯрди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╕рд╢рд░реНрдд DetailView рд╕реНрдХреНрд░реАрди рдХреЛ рдзрдХреНрдХрд╛ рджреЗрддрд╛ рд╣реИред


 var body: some View { NavigationView { Text("World Time").font(.system(size: 30)) NavigationLink(destination: DetailView() { Text("Go Detail") } } } 

рдирдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ? рдпрд╣, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реАрдЯ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 Button(action: { print("Button Pushed") self.show_modal = true }) { Text("Present Modal") }.sheet(isPresented: self.$show_modal) { ModalView() } 

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, body рди рдХреЗрд╡рд▓ View рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг, рдмрд▓реНрдХрд┐ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рдХреЛ рднреА рд▓реМрдЯрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рд╣рдореЗрдВ DetailView рдирд╣реАрдВ рдмрд▓реНрдХрд┐ Text рдпрд╛ Image рдХреЛ DetailView рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рдорд┐рд▓рддрд╛ рд╣реИ!


рд╕реНрдХреНрд░реАрди рдкрд░ рддрддреНрд╡реЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ?


рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ VStack рдЕрдВрджрд░ рд▓рдВрдмрд╡рдд рд░реВрдк рд╕реЗ рд╕реНрдерд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрд╖реИрддрд┐рдЬ HStack рдФрд░ рдПрдХ рджреВрд╕рд░реЗ ZStack рдКрдкрд░ред ScrollView рдФрд░ ListView рднреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдЖрдк рддрддреНрд╡реЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рдЬрд╛рд▓ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╛рдЭрд╛ рдФрд░ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░, рдЖрдк рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдВрд▓рдЧреНрдирдХ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рдлреА рдмрдбрд╝рд╛ рдкреЗрдбрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, SwiftUI рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЧрд╣рд░реЗ рдХрдВрдЯреЗрдирд░ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╡реАрдбрд┐рдпреЛ рдореЗрдВ wwdc ( 15:32 рд╕реЗ рд╢реБрд░реВ ) рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИред


 var body: some View { NavigationView { VStack { NavigationLink(destination: LargeView(timeString: subtitle)) { Text("See Fullscreen") } Text("World Time").font(.system(size: 30)) } } } 

рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдХреИрд╕реЗ рджрд┐рдЦрд╛рдПрдВ?


рдПрдХ NavigationView рджреГрд╢реНрдп рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ; рдЖрдкрдХреЛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╢реАрд░реНрд╖рдХ рдФрд░ рд╢реИрд▓реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреА рд╣реЛрдЧреАред


 NavigationView { VStack{}.navigationBarTitle(Text("World Time"), displayMode: .inline) } 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ navigationBarTitle рдлрд╝рдВрдХреНрд╢рди рдХреЛ NavigationView View рдкрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдЖрдВрддрд░рд┐рдХ View рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред DisplayMode рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ рдЬреЛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдХреА рд╢реИрд▓реА рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ: рдмрдбрд╝рд╛ рдпрд╛ рдорд╛рдирдХред


рдХреНрдпрд╛ рджреГрд╢реНрдпрджрд░реНрд╢рди рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╣реИ?


рдпрджрд┐ рдЖрдк View рдкреНрд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╕рдордп рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк onAppear {} рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред OnAppear рдХреЛ рдХрд┐рд╕реА рднреА View рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, VStack ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЬрдм рдХрдВрдЯреЗрдирд░ рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рд╕реЗ http рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


 struct ContentView : View { @State var statusString : String = "World Time" var body: some View { NavigationView { VStack { NavigationLink(destination:DetailView()) { Text("Go Detail") } Text(statusString).font(.system(size: 30)) }.onAppear { self.loadTime() } } } func loadTime(){ NetworkService().getTime { (time) in if let aTime = time { self.statusString = "\(aTime.date())" } } } } 

рд╣рдо loadTime рдлрд╝рдВрдХреНрд╢рди рдХрд╣рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ рдФрд░ loadTime рдореЙрдбрд▓ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╣рдо NetworkService рд╡рд░реНрдЧ рдореЗрдВ рд╕рд╛рдЗрдХрд┐рд▓реЛрдВ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗ, рдЖрдк рд╕рднреА рдХреЛрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕реНрд░реЛрдд рдХреЛрдбред рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рд┐рдВрдХред

рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХреЛ рдмрд╛рдж рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрд░рд┐рдПрдмрд▓ var statusString рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪрд░ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЧреБрдг рд╣реИ @State ред рдЙрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?


рд╕рдВрдкрддреНрддрд┐ рд░реИрдкрд░ рдпрд╛ рдХреНрдпрд╛ рд╣реИ @State ?


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


@State рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рдЪрд░ рдШреЛрд╖рдгрд╛ рд╕реЗ рдкрд╣рд▓реЗ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреЗ рдмрд┐рдирд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, "World Time" рдЯреЗрдХреНрд╕реНрдЯ рдЬреИрд╕реЗ рд╣реА рд╣рдо рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рдЬреИрд╕реЗ рд╣реА рд╣рдо рд╕реНрдЯреЗрдЯрд╕ рд╕реНрдЯреНрд░реАрдВрдЧ рд╡реИрд▓реНрдпреВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗред


рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрд╛рдБрдзрдиреЗ рдХреЗ рд▓рд┐рдП ( рдЧреБрдг рдмрдВрдзрди ), рд╣рдо рдХреЛрдб рдореЗрдВ рдЪрд░ рдХреЗ рдирд╛рдо рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг $ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 struct DetailsView: View { @State var changeToggle: Bool var body: some View { Toggle(isOn: $changeToggle) { Text("Change Toggle") } } } 

рд╕реНрд╡рд┐рдЪ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ, рдЪрд░ рдХрд╛ рдореВрд▓реНрдп рднреА рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред


рд╕рдВрдкрддреНрддрд┐ рд░реИрдкрд░ рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдШрдЯрдХ рд╣реИ, рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред рд╕рдВрдкрддреНрддрд┐ рд░реИрдкрд░ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдкрд░рд┐рдЪрд┐рдд рдХреЗ рд▓рд┐рдП, wwdc рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдХреЛ рдпрд╣рд╛рдВ (37 рд╡реЗрдВ рдорд┐рдирдЯ рд╕реЗ), рдпрд╣рд╛рдВ (12 рд╡реЗрдВ рдорд┐рдирдЯ рд╕реЗ) рдФрд░ рдпрд╣рд╛рдВ (19 рд╡реЗрдВ рдорд┐рдирдЯ рд╕реЗ) рджреЗрдЦреЗрдВред


рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рджреГрд╢реНрдп рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ?


рдпрд╣ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЖрдк рд╢рдмреНрдж рдХреЗ рд╢рд╛рдмреНрджрд┐рдХ рдЕрд░реНрде рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдордп рджреГрд╢реНрдп рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗред SwiftUI рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рдврд╛рдВрдЪрд╛ рд╣реИ рдЬреЛ рдкреВрд░реЗ рджреГрд╢реНрдп рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рд╢рд░реАрд░ рдХреЗ рдЕрдВрджрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрдм рд╡реЗ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рджреГрд╢реНрдп рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо @State тАУ if рдХреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЧреБрдЪреНрдЫрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ @State тАУ if рдЪрд░ рдХреЗ рд╕рд╛рде рд╣реИред


 struct ContentView : View { @State var statusString : String = "World Time" @State var isTimeLoaded : Bool = false var body: some View { NavigationView { VStack { if isTimeLoaded { addNavigationLink() } Text(statusString).font(.system(size: 30)).lineLimit(nil) }.navigationBarTitle(Text("World Time"), displayMode: .inline) }.onAppear { self.loadTime() } } func addNavigationLink() -> some View { NavigationLink(destination: Text("124!!!")) { Text("Go Detail") } } func loadTime(){ NetworkService().getTime { (time) in if let aTime = time { self.statusString = "\(aTime.date().description(with: Locale.current))" self.isTimeLoaded = true } } } } struct DetailView : View { var timeString : String var body : some View { Text(timeString).font(.system(size: 40)).lineLimit(nil) } } 

рд╡реИрд╕реЗ, рдХреНрдпрд╛ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ addNavigationLink() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╢рдмреНрдж return рдирд╣реАрдВ рд╣реИ? рдпрд╣ рд╕реНрд╡рд┐рдлреНрдЯ 5.1 рдХрд╛ рдПрдХ рдФрд░ рдирд╡рд╛рдЪрд╛рд░ рд╣реИ - рдПрдХрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЕрдм return рд▓рд┐рдЦрдирд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред


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


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


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


рдЖрдк рдпрд╣рд╛рдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред


рд▓реЗрдЦ рдХреЛ рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЙрдкрдпреЛрдЧреА рдкрд╛рдПрдВрдЧреЗред


рдХреНрдпрд╛ рдкрдврд╝рдирд╛ рд╣реИ?


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


All Articles