рдкреНрд░рд╕реНрддреБрдд рд╣реИ рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ: рдЯреЗрдмрд▓ рд╡реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдирд╛

WWDC 2019 рдХреЗ рджреМрд░рд╛рди, рд╕рдмрд╕реЗ рдмрдбрд╝реА рдФрд░ рд╕рдмрд╕реЗ рд░реЛрдорд╛рдВрдЪрдХ рдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рд░рд┐рд▓реАрдЬ рдХреА рдШреЛрд╖рдгрд╛ рдереАред рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдпрд╛ рдврд╛рдВрдЪрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдШреЛрд╖рдгрд╛рддреНрдордХ рддрд░реАрдХреЗ рд╕реЗ рдХрдо рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

UIKit рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд┐рд╕реЗ рдЖрдорддреМрд░ рдкрд░ рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛, SwiftUI рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░-рдЖрдзрд╛рд░рд┐рдд рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд▓реНрджреА рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


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

рд▓реЙрдиреНрдЪ Xcode 11 ред рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рдордп, Xcode 11 рдЕрднреА рднреА рдмреАрдЯрд╛ рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рд╕реНрд╡рд┐рдлреНрдЯ 5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдлреНрдЯ рдХреЗ рдЙрдиреНрдирдд рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдлрд┐рд░ рднреА рднрд╛рд╖рд╛ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рд╕рдордЭрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИред

рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдиреЛрдЯ: Xcode рдореЗрдВ рдХреИрдирд╡рд╕ рдХреА рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдФрд░ рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдореИрдХ рдУрдПрд╕ 10.15 рдмреАрдЯрд╛ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред

SwiftUI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛


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

рдЫрд╡рд┐

Xcode рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП ContentView.swift рдирд╛рдордХ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдЧрд╛, рдФрд░ рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рд╣реЛрдЧреА рдХрд┐ рдЖрдкрдХреЗ рдХреЛрдб рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рджрд╛рдИрдВ рдУрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЫрд╡рд┐

рдпрджрд┐ рдЖрдк рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкреБрдирд░рд╛рд░рдВрдн рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдВрдХрд▓рди рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рдзреИрд░реНрдп рд░рдЦреЗрдВ рдФрд░ рд╕рдВрдХрд▓рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред

рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рд╕реВрдЪреА рджреГрд╢реНрдп рдмрдирд╛рдПрдВ


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

рд╢рд┐рдХреНрд╖рдХреЛрдВ рдХреА рд╕реВрдЪреА рдмрдирд╛рдПрдВ


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

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрддреНрдкрдиреНрди рдХреЛрдб рдореЗрдВ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рдорд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рдкрд╛рда рдШрдЯрдХ рд╣реИред рдХреЛрдб рд╕рдВрдкрд╛рджрдХ рдореЗрдВ, рдХреЛрдб рдорд╛рди рдХреЛ "рд╕рд╛рдЗрдорди рдПрдирдЬреА" рдореЗрдВ рдмрджрд▓реЗрдВред

struct ContentView: View { var body: some View { Text("Simon Ng") } } 


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

рдЫрд╡рд┐

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

рдЫрд╡рд┐

рдмрд╛рдИрдВ рдУрд░ рдХреЛрдб рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:

 struct ContentView: View { var body: some View { VStack { Text("Simon Ng") Text("Placeholder") } } } 


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

рдЕрдм "рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░" рдХреЗ рдкрд╛рда рдХреЛ "AppCoda рдХреЗ рд╕рдВрд╕реНрдерд╛рдкрдХ" рдореЗрдВ рдмрджрд▓реЗрдВ

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЗрд╕ рдкрд╛рда рдХреЗ рдмрд╛рдИрдВ рдУрд░ рдПрдХ рдЪрд┐рддреНрд░ рдЬреЛрдбрд╝реЗрдВред рдЪреВрдВрдХрд┐ рд╣рдо рдореМрдЬреВрджрд╛ рджреГрд╢реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рдХреЛ рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рд╕реНрдерд┐рддрд┐ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП HStack рдореЗрдВ VStack рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, тМШ + VStack рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ HStack рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░реЗрдВ рдЪреБрдиреЗрдВред рдиреАрдЪреЗ рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

рдЫрд╡рд┐

рдпрд╣ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

 struct ContentView: View { var body: some View { HStack { VStack { Text("Simon Ng") Text("Founder of AppCoda") } } } } 


рдЕрднреА рддрдХ рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдПрдХ рдЫрд╡рд┐ рдЬреЛрдбрд╝реЗрдВрдЧреЗред рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдмрджрд▓реЗрдВ:

 struct ContentView: View { var body: some View { HStack { Image(systemName: "photo") VStack { Text("Simon Ng") Text("Founder of AppCoda") } } } } 


IOS 13 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, Apple SFSymbols рдирд╛рдордХ рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред рдПрд╕рдПрдл рд╕рд┐рдВрдмрд▓, рдРрдкреНрдкрд▓ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд, 1,500 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрдгреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕реИрди рдлреНрд░рд╛рдВрд╕рд┐рд╕реНрдХреЛ рдкреНрд░рдгрд╛рд▓реА рдлрд╝реЙрдиреНрдЯ рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд░реНрдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рдЖрдХрд╛рд░ рдХреЗ рдкрд╛рда рдХреЗ рд╕рд╛рде рдСрдкреНрдЯрд┐рдХрд▓ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╕рдВрд░реЗрдЦрдг рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рд╣рдорд╛рд░реЗ рд╢рд┐рдХреНрд╖рдХреЛрдВ рдХреА рдЫрд╡рд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рддрдерд╛рдХрдерд┐рдд рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рдЫрд╡рд┐

рдЕрдм рдЖрдЗрдП рдХреБрдЫ рдорд╛рдореВрд▓реА рдбрд┐рдЬрд╛рдЗрди рдореБрджреНрджреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдЪреВрдВрдХрд┐ UITableRow рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЪрд▓реЛ рдкрд╛рда рдХреЛ рдмрд╛рдИрдВ рдУрд░ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░реЗрдВ (рдпрд╛рдиреА, рдЗрд╕реЗ рдореБрдЦреНрдп рдмрдирд╛рдПрдВ)ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, тМШ + VStack рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдирд┐рд░реАрдХреНрд╖рдг рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЧрдП рдЕрдиреБрд╕рд╛рд░ рдмрд╛рдИрдВ рд╕рдВрд░реЗрдЦрдг рдЖрдЗрдХрди рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ:

рдЫрд╡рд┐

рдЕрдЧрд▓рд╛, рд╣рдо рдХреЛрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рджреЗрдЦреЗрдВрдЧреЗред рд╕рд╛рде рд╣реА, рдирдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдХреЛрдб рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

 VStack(alignment: .leading) { ... } 


рдЕрдм рдЬрдмрдХрд┐ рджреВрд╕рд░рд╛ рдкрд╛рда рджреГрд╢реНрдп рд╢реАрд░реНрд╖рдХ рд╣реИ, рдЪрд▓реЛ рдлрд╝реЙрдиреНрдЯ рдмрджрд▓реЗрдВред рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЛрдб рдореЗрдВ "рд╕рдВрд╕реНрдерд╛рдкрдХ рдХреЗ AppCoda" рдХреЗ рдкрд╛рда рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдирд┐рд░реАрдХреНрд╖рдг рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдлрд╝реЙрдиреНрдЯ рдХреЛ "рд╕рдмрд╣реЗрдбрд▓рд╛рдЗрди" рдореЗрдВ рдмрджрд▓реЗрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдПрдХ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдФрд░ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред

рдЫрд╡рд┐

рдЪрд▓реЛ рд░рдВрдЧ рднреА рдмрджрд▓рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ "рдЧреНрд░реЗ" рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

 struct ContentView: View { var body: some View { HStack { Image(systemName: "photo") VStack(alignment: .leading) { Text("Simon Ng") Text("Founder of AppCoda") .font(.subheadline) .color(.gray) } } } } 


рдЕрдм, рдХрдИ рдирдореВрдиреЛрдВ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЬрд╛рджреВ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдЖрддреЗ рд╣реИрдВред рджреЗрдЦреЗрдВ рдХрд┐ рд╕реВрдЪреА рдмрдирд╛рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред Execute ec + HStack рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдПрдореНрдмреЗрдб рд▓рд┐рд╕реНрдЯ рдореЗрдВ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рджреЗрдЦрд╛! рджреЗрдЦреЗрдВ рдХрд┐ рдХреЛрдб рдЕрдкрдиреЗ рдЖрдк рдХреИрд╕реЗ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЦрд╛рд▓реА рдХреНрд╖реЗрддреНрд░ 5 рд╕реБрдВрджрд░ рдирдИ рд▓рд╛рдЗрдиреЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рдЗрдорди рдПрдирдЬреА рдХреЛ рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рдЫрд╡рд┐

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдХреЛрдб рдореЗрдВ рд╕реВрдЪреА рдХреИрд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдереАред HStack рдХреЛ рд╣рдЯрд╛рдХрд░ рдФрд░ рдЗрд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдмрджрд▓рдХрд░, рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рджреГрд╢реНрдп рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм рд╕реЛрдЪреЗрдВ рдХрд┐ рдЖрдкрдиреЗ рдХрд┐рддрдирд╛ рд╕рдордп рдмрдЪрд╛рдпрд╛ рдФрд░ рдЖрдкрдиреЗ рдХрд┐рддрдирд╛ рдХрдо рдХреЛрдб рд▓рд┐рдЦрд╛, рдЗрди рд╕рднреА UITableViewDataSource, UITableViewDelegate, Auto Layout, Dark Mode рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрддреНрдпрд╛рджрд┐ рд╕реЗ рдмрдЪрдирд╛, рдпрд╣ рд╕рдм рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ SwiftUI рдХреА рд╢рдХреНрддрд┐ рдФрд░ рд╢рдХреНрддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдкреВрд░реНрдг рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИрдВред рдЖрдЗрдП рдирдИ рд╕реВрдЪреА рдореЗрдВ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝реЗрдВред

рдХрд┐рд╕реА рд╕реВрдЪреА рдореЗрдВ рдбреЗрдЯрд╛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ


рд╣рдореЗрдВ рдЬреЛ рдбреЗрдЯрд╛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдФрд░ рдЙрдирдХреА рдЬреАрд╡рдиреА рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЙрдирдХреА рд╕рднреА рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИред рдЖрдк рдпрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдЖрдкрдХреЛ Tutor.swif t рдФрд░ Tutor.xcasset рдирд╛рдо рдХреЗ рд╕рд╛рде 2 рдлрд╛рдЗрд▓реЗрдВ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдПред

рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрд╡рд┐рдлреНрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рд╕рдВрд╕рд╛рдзрди рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд╕рд╛рде Xcode рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВред рдЙрдиреНрд╣реЗрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдиреЗрд╡рд┐рдЧреЗрдЯрд░ рдореЗрдВ рдЦреАрдВрдЪреЗрдВред

Tutor.swif рдЯреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣рдо рдЯреНрдпреВрдЯрд░ рд╕рдВрд░рдЪрдирд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкрд╣рдЪрд╛рдирдиреЗ рдпреЛрдЧреНрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВред рдЖрдк рд╕рдордЭ рдЬрд╛рдПрдВрдЧреЗ рдХрд┐ рдпрд╣ рдмрд╛рдж рдореЗрдВ рдХреНрдпреЛрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╣рдо рд╡реИрд░рд┐рдПрдмрд▓ рдЖрдИрдбреА, рдирд╛рдо, рд╢реАрд░реНрд╖рдХ, рдЬреИрд╡ рдФрд░ рдЗрдореЗрдЬрдирд╛рдо рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЕрдВрдд рдореЗрдВ, рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред Tutor.xcassets рдореЗрдВ рдЯреАрдо рдХреЗ рд╕рднреА рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдЪрд┐рддреНрд░ рд╣реИрдВред

ContentView.swift рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдБ рдФрд░ рдХреЛрдб рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрджрд▓реЗрдВ:

 struct ContentView: View { //1 var tutors: [Tutor] = [] var body: some View { List(0..<5) { item in Image(systemName: "photo") VStack(alignment: .leading) { Text("Simon Ng") Text("Founder of AppCoda") .font(.subheadline) .color(.gray) } } } } #if DEBUG struct ContentView_Previews : PreviewProvider { static var previews: some View { //2 ContentView(tutors: testData) } } #endif 


рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ:
  1. рдЯреНрдпреВрдЯрд░ рдирд╛рдордХ рдПрдХ рдирдП рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдЬреЛ рдЯреНрдпреВрдЯрд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рд╣реИред
  2. рдЪреВрдВрдХрд┐ рд╣рдо ContentView рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЪрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ContentView_Previews рдХреЛ рднреА рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред TestData рдХреЗ рд▓рд┐рдП рдЯреНрдпреВрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░реЗрдВред

рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрднреА рддрдХ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрджрд▓реЗрдВ:

 struct ContentView: View { var tutors: [Tutor] = [] var body: some View { List(tutors) { tutor in Image(tutor.imageName) VStack(alignment: .leading) { Text(tutor.name) Text(tutor.headline) .font(.subheadline) .color(.gray) } } } } 


рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ ContentView рд╕реНрдХреНрд░реАрди рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрдпреВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рд╡рд╣рд╛рдБ рддреБрдо рдЬрд╛рдУ! рджреЗрдЦрд┐рдП рдХреИрд╕реЗ рдирдЬрд╝рд╛рд░рд╛ рдмрджрд▓рд╛ рд╣реИред

рдЫрд╡рд┐

рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╡реЗ рдЕрдзрд┐рдХ рдЧреЛрд▓ рджрд┐рдЦреЗрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдЧреЛрд▓ рдХреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЫрд╡рд┐ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ, + рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рджреВрд╕рд░реЗ рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВред рдпрд╣ рд▓реЗрдЖрдЙрдЯ рд╕рдВрд╢реЛрдзрдХ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдк рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдЫрд╡рд┐

рдХреЙрд░реНрдирд░ рд░реЗрдбрд┐рдпрд╕ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ, рдЗрд╕реЗ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рд╡рд┐рдВрдбреЛ рд╕реЗ рдЦреАрдВрдЪреЗрдВ рдФрд░ рдЫрд╡рд┐ рдкрд░ рд░рдЦреЗрдВред рдЖрдкрдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХреЛрдб рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдЫрд╡рд┐ рдХреЛ рдирд┐рдореНрди рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЫрд╡рд┐

рд╣рд╛рд▓рд╛рдБрдХрд┐, 3 рдХреА рд╡рдХреНрд░ рддреНрд░рд┐рдЬреНрдпрд╛ рдмрд╣реБрдд рдЫреЛрдЯреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ 40 рдкрд░ рдмрджрд▓реЗрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ рд╕реБрдВрджрд░ рдЧреЛрд▓ рдЪрд┐рддреНрд░ рдорд┐рд▓рддреЗ рд╣реИрдВред

рдЫрд╡рд┐

рд╕реЗрд▓ рдФрд░ рд╕реВрдЪреА рддреИрдпрд╛рд░ рд╣реИ! рдЗрд╕рдХреЗ рдмрд╛рдж, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реЗрд▓ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдЖрдкрдХреЛ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреА рд╣реЛрдЧреАред рдЪрд▓реЛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░реЗрдВред

рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрдирд╛рдПрдБ


рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдФрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдореМрдЬреВрджрд╛ рджреГрд╢реНрдп рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИред рд╕рдВрднрд╡рддрдГ, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдФрд░ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рджреГрд╢реНрдп рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдмрд╕ рдЖрдкрдХреЛ рдХреБрдЫ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

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

 ... var body : some View { NavigationView { List(tutors) { tutor in ... } } } ... 


рдЖрдкрдХреЛ рдПрдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рджреГрд╢реНрдп рдореЗрдВ рд╕реВрдЪреА рдХреЛрдб рдХреЛ рд▓рдкреЗрдЯрдирд╛ рд╣реЛрдЧрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдореЗрдВ рд╢реАрд░реНрд╖рдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХреЛ рд╕реВрдЪреА рдХреЛ рдиреАрдЪреЗ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рд╕реЗ рдмреАрдЪ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдЕрдВрддрд░ рдирд┐рдХрд▓ рдЬрд╛рдПред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╢реАрд░реНрд╖рдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЛрдб рдХреА рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ (рдпрд╛рдиреА .navigationBarTTlele) рдХреЛ рдЬреЛрдбрд╝рдХрд░ рд╣реЗрдбрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 ... var body : some View { NavigationView { List(tutors) { tutor in ... } .navigationBarTitle(Text("Tutors")) } } ... 


рдЕрдм рд╕реНрдХреНрд░реАрди рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЫрд╡рд┐

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

 ... var body : some View { NavigationView { List(tutors) { tutor in NavigationButton(destination: Text(tutor.name)) { Image(tutor.imageName) VStack(alignment: .leading) { Text(tutor.name) Text(tutor.headline) .font(.subheadline) .color(.gray) } } } .navigationBarTitle(Text("Tutors")) } } ... 


рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп рдХрд╛ рдирд╛рдо рдЕрдм рдПрдХ рд╡рд┐рд╕реНрддреГрдд рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдм рд╕рдордп рд╣реИ рдЗрд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ред

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

рдЫрд╡рд┐

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

рдЫрд╡рд┐

рдЬрдм рдбрд╛рдЙрдирд▓реЛрдб рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕реЗрд▓ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╕реНрдЯреИрдХ рдореЗрдВ рдПрдХ рдирдП рджреГрд╢реНрдп рдкрд░ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдЪрдпрдирд┐рдд рд╕реЗрд▓ рдХрд╛ рдирд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛ред

рдЫрд╡рд┐

рдПрдХ рд╡рд┐рд╕реНрддреГрдд рджреГрд╢реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рддрдХрдиреАрдХ рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВ рдЬреЛ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рд╕реБрдкрд╛рдареНрдп рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред тМШ + рдиреЗрд╡реАрдЧреЗрд╢рдирдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ "рдПрдХреНрд╕реНрдЯреНрд░реЗрдХреНрдЯ рд╕рдмрд╡реНрдпреВ" рдЪреБрдиреЗрдВред

рдмреВрдо! рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдиреЗрд╡рд┐рдЧреЗрд╢рдирдмрдЯрди рдореЗрдВ рд╕рднреА рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдИ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдереЗ, рдЬреЛ рдЗрд╕реЗ рдмрд╣реБрдд рд╕реБрдкрд╛рдареНрдп рдмрдирд╛рддрд╛ рд╣реИред TutorCell рдХреЗ рд▓рд┐рдП ExtractedView рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВред

рдЕрдм рдЖрдкрдХреЛ TutorCell рдореЗрдВ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрдпреВрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИред рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ TutorCell рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдЬреЛрдбрд╝реЗрдВ:

 struct TutorCell: View { let tutor: Tutor var body: some View { ... } } 


рдФрд░, ContentView рдореЗрдВ, рд▓рд╛рдЗрди рдХреЛ рдмрджрд▓рдХрд░ рд▓рд╛рдкрддрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВ:

 ... List(tutors) { tutor in TutorCell(tutor: tutor) }.navigationBarTitle(Text("Tutors")) ... 


рд╡рд╣ рд╕рдм рд╣реИ! рдПрдХ рд╕реВрдЪреА рдФрд░ рдХреЛрд╢рд┐рдХрд╛рдПрдВ рд╣реИрдВ, рдЙрди рд╕рднреА рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реЛрдЪрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдХреНрд░рдо рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ! рдЖрдЧреЗ, рд╣рдо рдПрдХ рд╡рд┐рд╕реНрддреГрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╢рд┐рдХреНрд╖рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рдПрдЧрд╛ред

рдЫрд╡рд┐

рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╢реНрдп рдмрдирд╛рдирд╛ред


рдлрд╝рд╛рдЗрд▓> рдирдИ> рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛рдХрд░ рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред IOS рдХреЗ рдЕрдВрддрд░реНрдЧрдд, SwiftUI View рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ TutorDetail рдирд╛рдо рджреЗрдВ ред

рдЫрд╡рд┐

рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЗрдВ, рдореБрдЦреНрдп рдЖрдзрд╛рд░ рджреГрд╢реНрдп рдкрд╣рд▓реЗ рд╣реА рдмрдирд╛рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рдЪрд▓реЛ рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, + рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдкрд╛рда рджреГрд╢реНрдп рдореЗрдВ рдЫрд╡рд┐ рдХреЛ рд░рдЦреЗрдВред рдЫрд╡рд┐ рдХрд╛ рдирд╛рдо "рд╕рд╛рдЗрдорди рдПрдирдЬреА" рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рд╕рд╛рдЗрдорди рдХреА рдПрдХ рддрд╕реНрд╡реАрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред рдЕрдм рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЕрдиреБрд╕рд╛рд░ рдХреЛрдб рдмрджрд▓реЗрдВ:

 struct TutorDetail: View { var body: some View { //1 VStack { //2 Image("Simon Ng") .clipShape(Circle()) .overlay( Circle().stroke(Color.orange, lineWidth: 4) ) .shadow(radius: 10) //3 Text("Simon Ng") .font(.title) } } } 


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдХреЛрдб рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВред рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:
  1. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдкрдиреЗ рд╕рднреА рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╕реНрдЯреИрдХ рдореЗрдВ рдкреИрдХ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЙрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдирд╛рдПрдВрдЧреЗред
  2. рдлрд┐рд░ рд╣рдо рд╕рд╛рдЗрдорди рдХреА рдЫрд╡рд┐ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реЗ рдЪреЗрддрди рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЫрд╡рд┐ рдХреНрд▓рд┐рдк рдХреЛ рдПрдХ рд╕рд░реНрдХрд▓ рдЖрдХрд╛рд░ рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред рдХреЛрдиреЗрд░реЗрдбрд┐рдпрд╕ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрдХрд▓ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЫрд╡рд┐ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдПрдХ рд╕рдлреЗрдж рдлреНрд░реЗрдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░реНрдХрд▓ рдУрд╡рд░рд▓реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕реБрдВрджрд░ рдирд╛рд░рдВрдЧреА рдлреНрд░реЗрдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рд╣рдо рдХреБрдЫ рдЫрд╡рд┐ рдЧрд╣рд░рд╛рдИ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдореВрд▓реА рдЫрд╛рдпрд╛ рдЬреЛрдбрд╝реЗрдВрдЧреЗред
  3. рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреА рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рд╢рд┐рдХреНрд╖рдХ рдХрд╛ рдирд╛рдо рдлрд╝реЙрдиреНрдЯ рд╢реАрд░реНрд╖рдХ рдлрд╝реЙрдиреНрдЯ рдкрд░ рд╕реЗрдЯ рдХрд░рддреА рд╣реИред


рдЫрд╡рд┐

рдЖрдкрдХреЛ рджреЛ рдФрд░ рдкрд╛рда рджреГрд╢реНрдп рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд╢реАрд░реНрд╖рдХ рдФрд░ рдЬреИрд╡ред рд╢рд┐рдХреНрд╖рдХ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдкрд╛рда рджреГрд╢реНрдп рдХреЗ рдиреАрдЪреЗ рджреЛ рдкрд╛рда рджреГрд╢реНрдп рдЦреАрдВрдЪреЗрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

 struct TutorDetail: View { var body: some View { VStack { Image("Simon Ng") .clipShape(Circle()) .overlay( Circle().stroke(Color.orange, lineWidth: 4) ) .shadow(radius: 10) Text("Simon Ng") .font(.title) Text("Founder of AppCoda") Text("Founder of AppCoda. Author of multiple iOS programming books including Beginning iOS 12 Programming with Swift and Intermediate iOS 12 Programming with Swift. iOS Developer and Blogger.") } } } 


рдЫрд╡рд┐

рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЯреЗрдХреНрд╕реНрдЯ рд╡реНрдпреВ рд╣реИред рдмреБрд░реА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдмреБрд░реЗ рджрд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рд╢реАрд░реНрд╖рдХ рдФрд░ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдирд╣реАрдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреАрд╡рдиреА рдХрд╛ рдкрд╛рда рджреГрд╢реНрдп рд╕рднреА рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЪрд▓реЛ рдЗрд╕реЗ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВред

рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХреЛрдб рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:

 struct TutorDetail: View { var body: some View { VStack { Image("Simon Ng") .clipShape(Circle()) .overlay( Circle().stroke(Color.orange, lineWidth: 4) ) .shadow(radius: 10) Text("Simon Ng") .font(.title) //1 Text("Founder of AppCoda") .font(.subheadline) //2 Text("Founder of AppCoda. Author of multiple iOS programming books including Beginning iOS 12 Programming with Swift and Intermediate iOS 12 Programming with Swift. iOS Developer and Blogger.") .font(.headline) .multilineTextAlignment(.center) } } } 


  1. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рдЙрдкрд╢рд╛рдЦрд╛ рдлрд╝реЙрдиреНрдЯ рдХреЗ рд╕рд╛рде "AppCoda рдХрд╛ рд╕рдВрд╕реНрдерд╛рдкрдХ" рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
  2. рдЗрд╕реА рддрд░рд╣, рд╣рдо рд╣реЗрдбрд▓рд╛рдЗрди рдлрд╝реЙрдиреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреАрд╡рдиреА рдХрд╛ рдкрд╛рда рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рднреА рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░реЗрдВрдЧреЗред multilineTextAlignment (.center)


рдЫрд╡рд┐

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдЬреАрд╡рдиреА рдХреЗ рдкрд╛рда рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рдкреВрд░реЗ рдкрд╛рда рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЛрдб рдХреА рдПрдХ рдирдИ рд▓рд╛рдЗрди рдЬреЛрдбрд╝рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 ... Text("Founder of AppCoda. Author of multiple iOS programming books including Beginning iOS 12 Programming with Swift and Intermediate iOS 12 Programming with Swift. iOS Developer and Blogger.") .font(.headline) .multilineTextAlignment(.center) .lineLimit(50) ... 


рдЫрд╡рд┐

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

 struct TutorDetail: View { var body: some View { VStack { Image("Simon Ng") .clipShape(Circle()) .overlay( Circle().stroke(Color.orange, lineWidth: 4) ) .shadow(radius: 10) Text("Simon Ng") .font(.title) Text("Founder of AppCoda") .font(.subheadline) //1 Divider() Text("Founder of AppCoda. Author of multiple iOS programming books including Beginning iOS 12 Programming with Swift and Intermediate iOS 12 Programming with Swift. iOS Developer and Blogger.") .font(.headline) .multilineTextAlignment(.center) .lineLimit(50) //2 }.padding() } } 


рдпрд╣рд╛рдБ рд╣рдо рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ:
  1. рд╡рд┐рднрд╛рдЬрдХ рдЬреЛрдбрд╝рдирд╛, рдбрд┐рд╡рд╛рдЗрдбрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ ()
  2. рдкреВрд░реЗ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╕реНрдЯреИрдХ рдореЗрдВ рдкреИрдбрд┐рдВрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ VStack рдШреЛрд╖рдгрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ .padding () рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


рдЫрд╡рд┐

рд╡рд╣ рд╕рдм рд╣реИ! рдмрдзрд╛рдИ! рд╡рд┐рд╕реНрддреГрдд рджреГрд╢реНрдп рд╕реНрдХреНрд░реАрди рддреИрдпрд╛рд░ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рд╢рд┐рдХреНрд╖рдХреЛрдВ рдХреА рд╕реВрдЪреА рдФрд░ рдЙрдирдХреЗ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред

рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░


рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЯреНрдпреВрдЯрд░реЛрдбреЗрд▓ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХреБрдЫ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╢рд░реАрд░ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:

 var name: String var headline: String var bio: String var body: some View { ... } 


рдпреЗ рдРрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо ContentView рд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВ:

 ... var body: some View { VStack { // 1 Image(name) .clipShape(Circle()) .overlay( Circle().stroke(Color.orange, lineWidth: 4) ) .shadow(radius: 10) //2 Text(name) .font(.title) //3 Text(headline) .font(.subheadline) Divider() //4 Text(bio) .font(.headline) .multilineTextAlignment(.center) .lineLimit(50) //5 }.padding().navigationBarTitle(Text(name), displayMode: .inline) } ... 


  1. рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рд╢рд┐рдХреНрд╖рдХ рдХрд╛ рдирд╛рдо рдЪрд░ рдирд╛рдо рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ
  2. рд╢реАрд░реНрд╖рдХ рдкрд╛рда рдХреЛ рд╢реАрд░реНрд╖рдХ рдЪрд░ рд╕реЗ рдмрджрд▓реЗрдВ
  3. рдЕрдВрдд рдореЗрдВ, рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд▓рдВрдмреЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЛ рд╡реЗрд░рд┐рдПрдмрд▓ рдмрд╛рдпреЛ рд╕реЗ рдмрджрд▓реЗрдВ
  4. рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рднреА рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╢рд┐рдХреНрд╖рдХ рдХреЗ рдирд╛рдо рдкрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдХрд╛ рд╢реАрд░реНрд╖рдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред


рдЕрдВрддрд┐рдо рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо, рд╣рдореЗрдВ рд▓рд╛рдкрддрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ TutorDetail_Previews рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 #if DEBUG struct TutorDetail_Previews : PreviewProvider { static var previews: some View { TutorDetail(name: "Simon Ng", headline: "Founder of AppCoda", bio: "Founder of AppCoda. Author of multiple iOS programming books including Beginning iOS 12 Programming with Swift and Intermediate iOS 12 Programming with Swift. iOS Developer and Blogger.") } } #endif 


рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, рд╣рдо рд▓рд╛рдкрддрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рднрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рдереАред

рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ рдХрд┐ #if DEBUG / # рдПрдВрдбрд┐рдл рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реБрдЖред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрди рдХрдорд╛рдВрдбреНрд╕ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХреЛрдИ рднреА рдХреЛрдб рдХреЗрд╡рд▓ рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдбрд┐рдмрдЧрд┐рдВрдЧ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдЖрдкрдХреЗ рдЕрдВрддрд┐рдо рдЖрд╡реЗрджрди рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рдирдХрд╛рд░реА рднреА рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реИред

рдЫрд╡рд┐

рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЕрдВрддрд┐рдо рдЪрд░рдг рдЗрд╕ рджреГрд╢реНрдп рдХреЛ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рд╣реИред ContentView.swift рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВред рддреБрдо рд╕рдм рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ TutorCell рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдиреАрдЪреЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЛрдб рдмрджрд▓реЗрдВ:

 ... var body: some View { return NavigationButton(destination: TutorDetail(name: tutor.name, headline: tutor.headline, bio: tutor.bio)) { ... } } ... 


рд╢рд┐рдХреНрд╖рдХ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рднрд░рддреЗ рд╕рдордп рдЧрдВрддрд╡реНрдп рдХреЛ рдЯреНрдпреВрдЯрд░рдбреЗрд▓ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЫрд╡рд┐

рдкреНрд▓реЗ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░реЗрдВред рдпрджрд┐ рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рднреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдмрд╕ рд╕рджрд╕реНрдп рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ:

рдЫрд╡рд┐

рдФрд░ рдлрд┐рд░ рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рд╡рд┐рд╕реНрддреГрдд рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЫрд╡рд┐

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


рдпрд╣ рд▓реЗрдЦ SwiftUI рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред рдЕрдм рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рдЬреИрд╕реЗ рдХрд┐ рдХрд╛рд░реНрдп рдЕрдиреБрд╕реВрдЪрдХ, рдЖрджрд┐ рдмрдирд╛рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреБрдЫ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕ рд░реВрдкрд░реЗрдЦрд╛ рдкрд░ Apple рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдФрд░ WWDC 2019 рд╕рддреНрд░ред

SwiftUI рдкреНрд░рд▓реЗрдЦрди
рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓
рдкреНрд░рд╕реНрддреБрдд рд╣реИ рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ: рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдЖрдкрдХрд╛ рдкрд╣рд▓рд╛ рдРрдк
SwiftUI рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИ

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

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдЖрдк рдпрд╣рд╛рдВ рддреИрдпрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

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


All Articles