SwiftUI Xcode рдкрд░ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИред рдпрджрд┐ рдЖрдк SwiftUI рдХрд╛ рддреНрд╡рд░рд┐рдд рдкрд░рд┐рдЪрдп рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдЖрдкрдХреЗ рд▓рд┐рдП рд╣реИред
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП SwiftUI рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рд╕рд┐рд╕реНрдЯрдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реИрдВ MacOS Catalina рдФрд░ Xcode 11. рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ
"рдлрд╝рд╛рдЗрд▓> рдирдпрд╛> рдкреНрд░реЛрдЬреЗрдХреНрдЯ ..." ,
"рд╕рд┐рдВрдЧрд▓ рд╡реНрдпреВ рдРрдк" рдЪреБрдиреЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐
"рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕: рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ" рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИ ред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛, рдЕрдм рдЖрдк
рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдкрд░ рддреБрд░рдВрдд рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ
"рд╣реИрд▓реЛ, рд╣реИрдмрд░!" рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдХреВрд▓ рд╣рд╛рдБ?
рдпрджрд┐ рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдлрд┐рд░ рд╕реЗ
рд╢реБрд░реВ рдХрд░реЗрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ (рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ)ред рдпрджрд┐
рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ -
рд╕рдВрдкрд╛рджрдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдХреНрд▓рд┐рдХ
рдХрд░реЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐
рдХреИрдирд╡рд╛рд╕ рдЪрдпрдирд┐рдд рд╣реИ
(тМШOptions + ommCommand + .Enter) ред

рджреЗрдЦреЗрдВ, рдкрд╛рда, рдвреЗрд░ ...
рдпрджрд┐ рдЖрдк
ContentView.swift рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ:
struct ContentView: View { var body: some View { Text(", !") } }
рдпрд╣рд╛рдБ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐
ContentView> рдмреЙрдбреА рдореЗрдВ рдПрдХ
рдЯреЗрдХреНрд╕реНрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ
"Hello, Habr!" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рдФрд░ рдкрд╛рда рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ
рд╢рд░реАрд░ рджреГрд╢реНрдп рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ Xcode рд╢рдкрде рд▓реЗрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ
HStack рдпрд╛
VStack рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдХрдорд╛рдВрдб рджрдмрд╛рдПрдВ рдФрд░
рдЯреЗрдХреНрд╕реНрдЯ (ommCommand + Text) рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдлрд┐рд░
"рдПрдореНрдмреЗрдб рдЗрдирд╕реНрдЯреИрдХ" рдЪреБрдиреЗрдВ ред

рдпрд╣ рдХрдорд╛рдВрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ
HStack рдмрдирд╛рдПрдЧреА рдФрд░ рд╣рдорд╛рд░реЗ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рд╡рд╣рд╛рдВ
рдЬреЛрдбрд╝реЗрдЧреА ред рдЕрдм рдЖрдк рдПрдХ рдФрд░ рдкрд╛рда рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
struct ContentView: View { var body: some View { HStack { Text(",") Text("!") } } }
рд╕реНрд╡рд┐рдлреНрдЯреБрдИ рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░
рдпрджрд┐ рдЖрдк
тАЬandCommand + TextтАЭ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░
тАЬShow SwiftUI InspectorтАжтАЭ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдирд┐рд░реАрдХреНрд╖рдХ рдЦреБрд▓реЗрдЧрд╛ рдЬрд╣рд╛рдБ рдЖрдк рдкрд╛рда рдЧреБрдгреЛрдВ рдХреЛ рдиреЗрддреНрд░рд╣реАрди рд░реВрдк рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░
"рдлрд╝реЙрдиреНрдЯ" рдХреЛ
"рд▓рд╛рд░реНрдЬ рдЯрд╛рдЗрдЯрд▓" рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛
рдЧрдпрд╛ рдерд╛ , рддреЛ рдХреЛрдб рднреА
.font (.largeTitle) рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдмрд╣реБрдд рд╕рд░рд▓:

рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐
рд░рд╛рдЬреНрдп рдХреНрдпрд╛
рд╣реИ , рдЖрдЗрдП рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЬреЛрдбрд╝реЗрдВред рд╣рдо рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдерд╛:
"whatCommand + HStack" ,
"VStack рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░реЗрдВ
" рдЪреБрдиреЗрдВ, рдлрд┐рд░ рдЗрд╕
VStack рдореЗрдВ рдмрдЯрди рдЬреЛрдбрд╝реЗрдВ:
struct ContentView: View { @State var tapCount = 0 var body: some View { VStack { HStack { Text(",") .font(.largeTitle) .foregroundColor(Color.green) Text("!") .font(.largeTitle) .fontWeight(.bold) } Button(action: { self.tapCount += 1 }) { Text("Tap count \(tapCount)") .font(.title) } } } }
рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо
рдЯреИрдкрдХрд╛рдЙрдВрдЯ рдХрд╛ рдореВрд▓реНрдп рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди
рд░рд╛рдЬреНрдп рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдпрджрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдХреБрдЫ рдореВрд▓реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛ рддреЛ рд╣рдорд╛рд░рд╛
рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирдП рд╕рд┐рд░реЗ
рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рд╣рдореЗрдВ
рд░рд╛рдЬреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рд╣рдо рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо
рдЯреИрдкрдХрд╛рдЙрдВрдЯ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ
рд╕реНрдЯреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рд░ рдХреНрд▓рд┐рдХ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ
рд╢рд░реАрд░ рдХреЛ рдлрд┐рд░
рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд▓рд╛рдЗрд╡ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди
рдлрд┐рд▓рд╣рд╛рд▓, рдЕрдЧрд░ рдЖрдк рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдФрд░ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
"рд▓рд╛рдЗрд╡ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди" рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдХреНрд░рд┐рдпрдг рдмрдЯрди рдиреАрдЪреЗ рджрд╛рдИрдВ рдУрд░ рд╕реНрдерд┐рдд рд╣реИ:

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