рдЪрд▓реЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓-рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдордЧреНрд░реА рдХреЛ рддреАрди рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдпрд╣ рд╕рд╛рдордЧреНрд░реА WWDC 2016 рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рдХрд╛ рднрд╛рд╖реНрдп рдЕрдиреБрд╡рд╛рдж рд╣реИред рдЖрдо рдзрд╛рд░рдгрд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд┐ "рд╣реБрдб рдХреЗ рдиреАрдЪреЗ" рдЪреАрдЬреЗрдВ рд░рд╣рдиреА рдЪрд╛рд╣рд┐рдП, рдХрднреА-рдХрднреА рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдЖрдЗрдЯрдо рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдФрд░ рдЗрд╕рдХреЗ рдЗрдЪреНрдЫрд┐рдд рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
рдпрд╣ рднрд╛рдЧ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдкреНрд░рдореБрдЦ рдореБрджреНрджреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдкреАрдУрдкреА рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рд╕реНрд╡рд┐рдлреНрдЯ рднрд╛рд╖рд╛ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╡рд┐рд╡рд░рдг рдХреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ "рдЗрдВрдЬрди рдХрдореНрдкрд╛рд░реНрдЯрдореЗрдВрдЯ" рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред
рдУрдУрдкреА рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдФрд░ рд╣рдореЗрдВ рдкреАрдУрдкреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ
рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдУрдУрдкреА рдореЗрдВ рдХрдИ рддрд░рд╣ рдХреА рдХрдордЬреЛрд░рд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ "рдУрд╡рд░рд▓реЛрдб" рдХрд░ рд╕рдХрддреА рд╣реИрдВред рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
- рдЖрд╡рдВрдЯрди: рдвреЗрд░ рдпрд╛ рдвреЗрд░?
- рд╕рдВрджрд░реНрдн рдЧрд┐рдирддреА: рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛?
- рд╡рд┐рдзрд┐ рдкреНрд░реЗрд╖рдг: рд╕реНрдерд┐рд░ рдпрд╛ рдЧрддрд┐рд╢реАрд▓?
1.1 рдЖрд╡рдВрдЯрди - рдвреЗрд░
рд╕реНрдЯреИрдХ рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рдЖрджрд┐рдо рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИред рд╣рдо рд╕реНрдЯреИрдХ (рдкреБрд╢) рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рд╕реНрдЯреИрдХ (рдкреЙрдк) рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд░рд▓рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд╛рди рд▓реЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреИрдХ рдореЗрдВ рдПрдХ рдЪрд░ (рд╕реНрдЯреИрдХ рдкреЙрдЗрдВрдЯрд░) рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдФрд░ рдкреВрд░реНрдгрд╛рдВрдХ (рдкреВрд░реНрдгрд╛рдВрдХ) рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐ рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди рдХреА рдЧрддрд┐ рдЗрд╕ рдЪрд░ рдореЗрдВ рдкреБрди: рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдХреА рдЧрддрд┐ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред
рдкреБрд╢ - рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдбрд╛рд▓реЗрдВ, рд╕реНрдЯреИрдХ рдкреЙрдЗрдВрдЯрд░ рдмрдврд╝рд╛рдПрдВ;
рдкреЙрдк - рд╕реНрдЯреИрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдХрдо рдХрд░реЗрдВред
рдорд╛рди рдкреНрд░рдХрд╛рд░
рдЖрдЗрдП рд╕рдВрд░рдЪрдирд╛рдУрдВ (рд╕рдВрд░рдЪрдирд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рд╕реНрдЯреИрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ, рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рд╕рдВрд░рдЪрдирд╛рдПрдВ (рд╕рдВрд░рдЪрдирд╛) рдФрд░ рдЧрдгрдирд╛ (рдПрдирдо) рд╣реИрдВ, рдФрд░ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рд╡рд░реНрдЧ (рд╡рд░реНрдЧ) рдФрд░ рдлрд╝рдВрдХреНрд╢рди / рдХреНрд▓реЛрдЬрд░ (рдлрдВрдХ) рд╣реИрдВред рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рд╕реНрдЯреИрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рд╣реАрдк рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред
struct Point { var x, y: Double func draw() {...} } let point1 = Point(...)

- рд╣рдо рд╕реНрдЯреИрдХ рдкрд░ рдкрд╣рд▓реА рд╕рдВрд░рдЪрдирд╛ рд░рдЦрддреЗ рд╣реИрдВ
- рдкрд╣рд▓реЗ рд╕рдВрд░рдЪрдирд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ
- рджреВрд╕рд░реА рд╕рдВрд░рдЪрдирд╛ рдХреА рд╕реНрдореГрддрд┐ рдмрджрд▓реЗрдВ (рдкрд╣рд▓рд╛ рдмрд░рдХрд░рд╛рд░ рд╣реИ)
- рдЙрдкрдпреЛрдЧ рдХрд╛ рдЕрдВрддред рдореБрдХреНрдд рд╕реНрдореГрддрд┐
1.2 рдЖрд╡рдВрдЯрди - рдвреЗрд░
рдвреЗрд░ рдПрдХ рдкреЗрдбрд╝ рдХреА рддрд░рд╣ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИред рдвреЗрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╖рдп рдпрд╣рд╛рдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред
рдХреНрдпреЛрдВ, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдвреЗрд░ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ? рдпрд╣рд╛рдБ рдХреНрдпреЛрдВ рд╣реИ:
- рд╕рдВрджрд░реНрдн рдЧрд┐рдирддреА
- рдореБрдлреНрдд рд╕реНрдореГрддрд┐ рдкреНрд░рд╢рд╛рд╕рди рдФрд░ рдЖрд╡рдВрдЯрди рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЦреЛрдЬ
- рдбреАрд▓рдХреНрд▓реЛрдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛
рдпрд╣ рд╕рдм рд╣реАрдк рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬреЛ рдвреЗрд░ рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреИрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрдо рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рд╣рдореЗрдВ рд╕реНрдЯреИрдХ рдкрд░ рдореБрдлреНрдд рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдо рдХреЗрд╡рд▓ рд╕реНрдЯреИрдХ-рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдореВрд▓реНрдп рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреИрдХ рдореЗрдВ рд╕реНрдЯреИрдХ-рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдКрдкрд░ рдХреА рд╕рдм рдХреБрдЫ рдореБрдлреНрдд рдореЗрдореЛрд░реА рд╣реИ) - рдУ (1) рдПрдХ рдСрдкрд░реЗрд╢рди рд╣реИ рдЬреЛ рд╕рдордп рдореЗрдВ рдирд┐рд░рдВрддрд░ рд╣реЛрддрд╛ рд╣реИред
рдЬрдм рд╣рдореЗрдВ рд╣реАрдк рдкрд░ рдореБрдлреНрдд рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдо рдбреЗрдЯрд╛ рдЯреНрд░реА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдЦреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ - рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдУ (рд▓реЙрдЧрди) рдСрдкрд░реЗрд╢рди рд╣реИ, рдЬреЛ рд╕рдордп рдореЗрдВ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣реАрдк рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ: рдЗрд╕рдХрд╛ рдХрд╛рдо рдЕрдиреНрдп рддрдВрддреНрд░реЛрдВ рдХреЗ рдПрдХ рдореЗрдЬрдмрд╛рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЖрдВрддреНрд░ рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВред
рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдореЛрдб рдореЗрдВ рд╣реАрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдерд┐рддрд┐ рдХреЛ рдХрд╛рдлреА рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрди (рдореЗрдореЛрд░реА) рдХреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рддрд╛рд▓реЗ (рд╕реЗрдорд╛рдлреЛрд░, рд╕реНрдкрд┐рдирд▓реЙрдХ рдЖрджрд┐) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╕реНрд╡рд┐рдлреНрдЯ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред
class Point { var x, y: Double func draw() {...} } let point1 = Point(...)

1. рд╣реАрдк рдкрд░ рдХреНрд▓рд╛рд╕ рдмреЙрдбреА рд░рдЦреЗрдВред рд╕реНрдЯреИрдХ рдкрд░ рдЗрд╕ рдмреЙрдбреА рдХреЛ рдкреЙрдЗрдВрдЯрд░ рд▓рдЧрд╛рдПрдВред
- рдХрдХреНрд╖рд╛ рдХреЗ рд╢рд░реАрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ
- рд╣рдо рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рд╢рд░реАрд░ рдмрджрд▓рддреЗ рд╣реИрдВ
- рдЙрдкрдпреЛрдЧ рдХрд╛ рдЕрдВрддред рдореБрдХреНрдд рд╕реНрдореГрддрд┐
1.3 рдЖрд╡рдВрдЯрди - рдПрдХ рдЫреЛрдЯрд╛ рдФрд░ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдЙрджрд╛рд╣рд░рдг
рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рд╕реНрдЯреИрдХ рдХрд╛ рдЪрдпрди рди рдХреЗрд╡рд▓ рдореЗрдореЛрд░реА рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рднреА рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
enum Color { case red, green, blue } enum Orientation { case left, right } enum Tail { case none, tail, bubble } var cache: [String: UIImage] = [] func makeBalloon(_ color: Color, _ orientation: Orientation, _ tail: Tail) -> UIImage { let key = "\(color):\(orientation):\(tail)" if let image = cache[key] { return image } ... }
рдпрджрд┐ рдХреИрд╢ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдХреБрдВрдЬреА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ рдореВрд▓реНрдп рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдХреИрд╢реНрдб UIImage рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред
рдЗрд╕ рдХреЛрдб рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:
рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрдд рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред"
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдХ рдХреЙрдкреА-рдСрди-рд░рд╛рдЗрдЯ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдЗрд╕рдХреА рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдкрдиреЗ рд╕рднреА рдХреИрд░реЗрдХреНрдЯрд░-рдПрд╕ рдХреЛ рд╣реАрдк рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдФрд░ рд╕реНрдЯреИрдХ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкрдиреЗ рд╕рднреА рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЛ рд╣реАрдк рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
рд▓рд╛рдЗрди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рд▓рд╛рдЗрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд┐рдХрд╛рд▓реЗрдВ, рдЗрд╕ рд▓рд╛рдЗрди рдореЗрдВ рдПрдХ рдирдИ рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ)ред рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рднреА рдкрд╛рддреНрд░реЛрдВ рдХреЛ рд╕реНрдЯреИрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдРрд╕реЗ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдЕрд╕рдВрднрд╡ рд╣реЛрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, C рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╕реНрдерд┐рд░ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЖрдХрд╛рд░ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдирд╣реАрдВ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рд╕рд╛рдордЧреНрд░реА рд╕реНрдЯреИрдХ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИред рдХреЙрдкреА-рдСрди-рд░рд╛рдЗрдЯ рдФрд░ рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ рдпрд╣рд╛рдВ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ред
рд╕рдорд╛рдзрд╛рди:
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рдпрд╣рд╛рдБ рд╕реНрдкрд╖реНрдЯ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
struct Attributes: Hashable { var color: Color var orientation: Orientation var tail: Tail }
рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдмрджрд▓реЗрдВ:
var cache: [Attributes: UIImage] = []
рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ
let key = Attributes(color: color, orientation: orientation, tail: tail)
рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ, рд╕рднреА рдЧреБрдг рд╕реНрдЯреИрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреИрдХ рдкрд░ рдПрдирдо рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдвреЗрд░ рдХрд╛ рдХреЛрдИ рдирд┐рд╣рд┐рдд рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрдм рдХреИрд╢ рд╢рдмреНрджрдХреЛрд╢ рдХреА рдЪрд╛рдмрд┐рдпрд╛рдБ рдмрд╣реБрдд рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЧрдИ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕ рдХреЛрдб рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯрддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИред рд╣рдореЗрдВ рдвреЗрд░ рдХреЗ рдирд┐рд╣рд┐рдд рдЙрдкрдпреЛрдЧ рд╕реЗ рднреА рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓рд╛ред
рдлреИрд╕рд▓рд╛: рдвреЗрд░ рдвреЗрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рдФрд░ рддреЗрдЬ рд╣реИ - рдЬреНрдпрд╛рджрд╛рддрд░ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рд╕реНрдкрд╖реНрдЯ рд╣реИред
2. рд╕рдВрджрд░реНрдн рдЧрдгрдирд╛
рдХрд┐рд╕ рд▓рд┐рдП?
рд╕реНрд╡рд┐рдлреНрдЯ рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣реЗрдк рдкрд░ рд╕реНрдореГрддрд┐ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдореБрдХреНрдд рдХрд░рдирд╛ рдХрдм рд╕рдВрднрд╡ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рд╡рд░реНрдЧ рдпрд╛ рдХрд╛рд░реНрдп рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗред рдпрд╣ рдПрдХ рд▓рд┐рдВрдХ рдЧрд┐рдирддреА рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╣реАрдк рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг (рд╡рд░реНрдЧ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди) рдореЗрдВ рдПрдХ рдЪрд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдВрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЬрдм рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╕реНрд╡рд┐рдлреНрдЯ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рд╕реНрдореГрддрд┐ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕реНрдЯреИрдХ-рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдФрд░ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрдВрддреНрд░ рдХреЗ "рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛" рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд▓рд┐рдВрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдореВрд▓реНрдп рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбреНрд╕ рд╕реЗ рдмрдврд╝ рд╕рдХрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбреНрд╕ рд╕реЗ рдПрдХ рд╡рд░реНрдЧ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбреНрд╕ (рд╕реНрдкрд┐рдирд▓реЙрдХ, рд╕реЗрдорд╛рдлреЛрд░реНрд╕, рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрди (рд▓рд┐рдВрдХ рдХреА рдЪрд░ рд╕рдВрдЦреНрдпрд╛) рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ред
рд╕реНрдЯреИрдХ: рдореБрдлреНрдд рдореЗрдореЛрд░реА рдФрд░ рдлреНрд░реАрдЗрдВрдЧ рдпреВрдЬреНрдб рдореЗрдореЛрд░реА - рд╕реНрдЯреИрдХ-рдкреЙрдЗрдВрдЯрд░ рдСрдкрд░реЗрд╢рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛
рдвреЗрд░: рдореБрдлреНрдд рдореЗрдореЛрд░реА рдФрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдореЗрдореЛрд░реА рдХреЛ рдлреНрд░реАрдЬрд╝ рдХрд░рдирд╛ - рдЯреНрд░реА рд╕рд░реНрдЪ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдФрд░ рд░реЗрдлрд░реЗрдВрд╕ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧред
рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ, рд╕рднреА рдЧреБрдг рд╕реНрдЯреИрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреИрдХ рдкрд░ рдПрдирдо рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдвреЗрд░ рдХрд╛ рдХреЛрдИ рдирд┐рд╣рд┐рдд рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрдм рдХреИрд╢ рд╢рдмреНрджрдХреЛрд╢ рдХреА рдЪрд╛рдмрд┐рдпрд╛рдБ рдмрд╣реБрдд рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЧрдИ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕ рдХреЛрдб рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯрддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИред рд╣рдореЗрдВ рдвреЗрд░ рдХреЗ рдирд┐рд╣рд┐рдд рдЙрдкрдпреЛрдЧ рд╕реЗ рднреА рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓рд╛ред
рдЫрджреНрдо рдХреЛрдб
рдЧрд┐рдирддреА рдХреЛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫрджреНрдордХреЛрд╢ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЯреБрдХрдбрд╝реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
class Point { var refCount: Int var x, y: Double func draw() {...} init(...) { ... self.refCount = 1 } } let point1 = Point(x: 0, y: 0) let point2 = point1 retain(point2)
struct
рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рд╕рдВрджрд░реНрдн рдЧрд┐рдирддреА рдЬреИрд╕реА рдПрдХ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:
- рд╕рдВрд░рдЪрдирд╛ рдвреЗрд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рд╣реИ
- рд╕рдВрд░рдЪрдирд╛ - рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдкрд░ рдХреЙрдкреА рдХреА рдЧрдИ, рдЗрд╕рд▓рд┐рдП, рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ
рд▓рд┐рдВрдХ рдХреЙрдкреА рдХрд░реЗрдВ
рдлрд┐рд░, рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╕реНрд╡рд┐рдлреНрдЯ рдХреЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдкрд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╕рдВрд░рдЪрдирд╛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд▓рд┐рдВрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рднреА рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
struct Label { let text: String let font: UIFont ... init() { ... text.refCount = 1 font.refCount = 1 } } let label = Label(text: "Hi", font: font) let label2 = label retain(label2.text._storage)
рд╣реАрдк рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд▓реЗрдмрд▓ рдФрд░ рд▓реЗрдмрд▓ 2 рд╕рд╛рдЭрд╛ рдЖрдо рдЙрджрд╛рд╣рд░рдг:
- рдкрд╛рда рд╕рд╛рдордЧреНрд░реА
- рдФрд░ рдлрд╝реЙрдиреНрдЯ
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рд╕рдВрд░рдЪрдирд╛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд▓рд┐рдВрдХ рдХрд░рддреА рд╣реИ, рддреЛ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХреЙрдкреА рдХрд░рддреЗ рд╕рдордп, рд▓рд┐рдВрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рджреЛрдЧреБрдиреА рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдХрд┐ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ "рдЖрд░рд╛рдо" рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИред
рдФрд░ рдлрд┐рд░ рд╕реЗ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдЙрджрд╛рд╣рд░рдг:
struct Attachment { let fileUrl: URL
рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:
- 3 рдвреЗрд░ рдЖрд╡рдВрдЯрди
- рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛрдИ рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдХреЛрдб рд╕реНрдкрд╖реНрдЯрддрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреА рд╣реИред
рдЗрд╕реА рд╕рдордп, uuid рдФрд░ mimeType рд╕рдЦреНрддреА рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪреАрдЬреЗрдВ рд╣реИрдВ:
uuid рдПрдХ рдкреНрд░рд╛рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx рд╣реИ
mimeType рдПрдХ рдкреНрд░рдХрд╛рд░ / рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреНрд░рд╛рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред
рдирд┐рд░реНрдгрдп
let uuid: UUID
рдорд╛рдЗрдо рдЯрд╛рдЗрдк рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдирдо рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
enum MimeType { init?(rawValue: String) { switch rawValue { case "image/jpeg": self = .jpeg case "image/png": self = .png case "image/gif": self = .gif default: return nil } } case jpeg, png, gif }
рдпрд╛ рдмреЗрд╣рддрд░ рдФрд░ рдЖрд╕рд╛рди:
enum MimeType: String { case jpeg = "image/jpeg" case png = "image/png" case gif = "image/gif" }
рдФрд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛:
let mimeType: MimeType
3.1 рд╡рд┐рдзрд┐ рдкреНрд░реЗрд╖рдг
- рдпрд╣ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ рдЬреЛ рд╡рд┐рдзрд┐ рдХреЛрдб рдХреЗ рд▓рд┐рдП рджрд┐рдЦрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛
рдЗрд╕ рддрдВрддреНрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ "рд╕рдВрджреЗрд╢" рдФрд░ "рд╡рд┐рдзрд┐" рдХреНрдпрд╛ рд╣реИрдВ:
- рдПрдХ рд╕рдВрджреЗрд╢ рд╡рд╣ рдирд╛рдо рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рднреЗрдЬрддреЗ рд╣реИрдВред рдирд╛рдо рдХреЗ рд╕рд╛рде рддрд░реНрдХ рдЕрднреА рднреА рднреЗрдЬреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
circle.draw(in: origin)
рд╕рдВрджреЗрд╢ рдбреНрд░рд╛ рд╣реИ - рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдоред рд░рд┐рд╕реАрд╡рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рд╕рд░реНрдХрд▓ рд╣реИред рдЙрддреНрдкрддреНрддрд┐ рднреА рдПрдХ рддрд░реНрдХ рд╣реИред
- рд╡рд┐рдзрд┐ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬреЛ рд╕рдВрджреЗрд╢ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдлрд┐рд░ рдореЗрдердб рдбрд┐рд╕реНрдкреИрдЪ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ рдЬреЛ рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдВрджреЗрд╢ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рд╡рд┐рдзрд┐ рдбрд┐рд╕реНрдкреИрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдЪреВрдВрдХрд┐ рд╣рдо рдореВрд▓ рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕реНрд╡рд┐рдлреНрдЯ рдХреЛ рдареАрдХ рд╕реЗ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
class Parent { func me() { print("parent") } } class Child: Parent { override func me() { print("child") } }
рдЙрджрд╛рд╣рд░рдг рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдмрдирд╛рдПрдБ рдФрд░ рдореБрдЭреЗ рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВ:
let parent = Parent() let child = Child() parent.me()
рдПрдХ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдгред рдФрд░ рдХреНрдпрд╛ рд╣реЛ рдЕрдЧрд░:
let array: [Parent] = [Child(), Child(), Parent(), Child()] array.forEach { $0.me()
рдпрд╣ рдЗрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдФрд░ рдореБрдЭреЗ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдВрд╕рд╛рдзрди рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ рд░реИрдо рд╣реИрдВред рдПрдХ рддрдВрддреНрд░ рдПрдХ рд╡рд┐рдзрд┐ рдкреНрд░реЗрд╖рдг рд╣реИред
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдореЗрдердб рдбрд┐рд╕реНрдкреИрдЪ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреИрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред
рдЬрдм рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЛрдб рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред рдЕрдЧрд░ рд╡рд╣ рдЬрд╛рдиреА рдЬрд╛рддреА рд╣реИ
рд╕рдВрдХрд▓рди рдХреЗ рд╕рдордп, рдлрд┐рд░ рдпрд╣ рд╕реНрдЯреЗрдЯрд┐рдХ рдбрд┐рд╕реНрдкреИрдЪ рд╣реИред рдпрджрд┐ рдХреЙрд▓ (рд░рдирдЯрд╛рдЗрдо рдореЗрдВ, рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдордп) рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдбрд╛рдпрдиреЗрдорд┐рдХ рдбрд┐рд╕реНрдкреИрдЪ рд╣реИред
3.2 рд╡рд┐рдзрд┐ рдкреНрд░реЗрд╖рдг - рд╕реНрдЯреЗрдЯрд┐рдХ рдбрд┐рд╕реНрдкреИрдЪ
рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо, рдЪреВрдВрдХрд┐:
- рдХрдВрдкрд╛рдЗрд▓рд░ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб (рд╡рд┐рдзрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рдХреЗ рдХрд┐рд╕ рдмреНрд▓реЙрдХ рдХреЛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╡рд╣ рдЗрд╕ рдХреЛрдб рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдЬреИрд╕реЗ рддрдВрддреНрд░ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗ рд╕рдХрддрд╛ рд╣реИред
- рд╕рд╛рде рд╣реА, рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдордп, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗрд╡рд▓ рдХреЛрдб рдХреЗ рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЛ рд╕рдВрдХрд▓рдХ рдХреЛ рдЬреНрдЮрд╛рдд рдХрд░реЗрдЧрд╛ред рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╣реА рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдХреЗ рдирд┐рд░реНрдзрд╛рд░рдг рдкрд░ рдХреЛрдИ рд╕рдВрд╕рд╛рдзрди рдФрд░ рд╕рдордп рдЦрд░реНрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рддреЗрдЬреА рдЖрдПрдЧреАред
3.3 рд╡рд┐рдзрд┐ рдбрд┐рд╕реНрдкреИрдЪ - рдбрд╛рдпрдиреЗрдорд┐рдХ рдбрд┐рд╕реНрдкреИрдЪ
рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐:
- рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдордп рд╡рд┐рдзрд┐ рдХрд╛ рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
- рдХреЛрдИ рд╕рдВрдХрд▓рдХ рдЕрдиреБрдХреВрд▓рди рдкреНрд░рд╢реНрди рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рд╣реИрдВ
рей.рек рд╡рд┐рдзрд┐ рдкреНрд░реЗрд╖рдг - рд╢реЛрдзрди
рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдЬреИрд╕реЗ рдПрдХ рддрдВрддреНрд░ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХреНрдпрд╛ рд╣реИ? рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
struct Point { var x, y: Double func draw() {
- рдкреЙрдЗрдВрдЯ.рдЯреНрд░реИрдХреНрдЯ () рд╡рд┐рдзрд┐ рдФрд░ рдбреНрд░рд╛рдЖрдкреЙрдЗрдВрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрдЯреЗрдЯрд┐рдХ рдбрд┐рд╕реНрдкреИрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдХрдард┐рдирд╛рдИ рдирд╣реАрдВ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рд╡рд┐рд░рд╛рд╕рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдкреБрдирд░реНрд╡рд┐рддреНрдд рдЕрд╕рдВрднрд╡ рд╣реИ)
- рдЪреВрдВрдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╣ рдЗрд╕реЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдбреНрд░рд╛рдЕрдкреЙрдЗрдВрдЯ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реИ, рдмрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдЙрд╕рдХреЗ рдХреЛрдб рд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ:
let point = Point(x: 0, y: 0) point.draw()
- рддрдм рдмрд┐рдВрджреБ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ:
let point = Point(x: 0, y: 0)
рд╣рдордиреЗ рдПрдХ рдмрд┐рдВрджреБ рдмрдирд╛рдпрд╛, рдбреНрд░рд╛ рд╡рд┐рдзрд┐ рдХреЗ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ - рд╕рдВрдХрд▓рдХ рдиреЗ рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ред рдбрд╛рдпрдиреЗрдорд┐рдХ рдбрд┐рд╕реНрдкреИрдЪ рдореЗрдВ, рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛрдЧрд╛ред
3.5 рд╡рд┐рдзрд┐ рдкреНрд░реЗрд╖рдг - рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо-рдЖрдзрд╛рд░рд┐рдд рдмрд╣реБрд░реВрдкрддрд╛
рдореБрдЭреЗ рдбрд╛рдпрдиреЗрдорд┐рдХ рдбрд┐рд╕реНрдкреИрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдмрд╛рд▓ рд╡рд░реНрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдП рдЧрдП рддрд░реАрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдмрд╣реБрд░реВрдкрддрд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
class Drawable { func draw() {} } class Point: Drawable { var x, y: Double override func draw() { ... } } class Line: Drawable { var x1, y1, x2, y2: Double override func draw() { ... } } var drawables: [Drawable] for d in drawables { d.draw() }
- рдбреНрд░реЙрдЗрдВрдЧ рд╕рд░рдгреА рдореЗрдВ рдкреНрд╡рд╛рдЗрдВрдЯ рдФрд░ рд▓рд╛рдЗрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
- рд╕рд╣рдЬ рд░реВрдк рд╕реЗ, рд╕реНрдЯреЗрдЯрд┐рдХ рдбрд┐рд╕реНрдкреИрдЪ рдпрд╣рд╛рдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдШ рдореЗрдВ рд▓реВрдк рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди, рдпрд╛ рд╢рд╛рдпрдж рдкреНрд╡рд╛рдЗрдВрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрдХрд▓рдХ рдЗрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреНрд░реЙ рдХрд╛ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ
рдлрд┐рд░ рдбрд╛рдпрдирд╛рдорд┐рдХ рдбрд┐рд╕реНрдкреИрдЪ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреНрд╖реЗрддреНрд░ рд╣реЛрддрд╛ рд╣реИред рддреЛ рдкреНрд╡рд╛рдЗрдВрдЯ (...)ред рдЯрд╛рдЗрдк рдкреНрд╡рд╛рдЗрдВрдЯ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛, рдФрд░ рд▓рд╛рдЗрди (...) рдЯрд╛рдЗрдк рд▓рд╛рдЗрди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА (рд╕реНрдерд┐рд░) рдореЗрдореЛрд░реА рдореЗрдВ рдХрд╣реАрдВ-рдХрд╣реАрдВ рдПрдХ рдЯреЗрдмрд▓ (рд╡рд░реНрдЪреБрдЕрд▓-рдЯреЗрдмрд▓) рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рд╕реВрдЪреА рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕реВрдЪреА рд╣реИред
рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ, рдЯрд╛рдЗрдк рдлреАрд▓реНрдб рдХреЛ рдЖрдЗрд╕рд╛ рдлреАрд▓реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╣рд░ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ (NSObject) рдкрд░ рдореМрдЬреВрдж рд╣реИред
рдХреНрд▓рд╛рд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд╡рд░реНрдЪреБрдЕрд▓-рдЯреЗрдмрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рд╕реНрд╡рдпрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рд╡рд╣рд╛рдВ (рд╕реНрд╡рдпрдВ) рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕ рдХреЛрдб рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛:
class Point: Drawable { ... override func draw(_ self: Point) { ... } } class Line: Drawable { ... override func draw(_ self: Line) { ... } } var drawables: [Drawable] for d in drawables { vtable[d.type].draw(d) }
рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╡рд░реНрдЪреБрдЕрд▓-рдЯреЗрдмрд▓ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд╡рд╣рд╛рдВ рдХрдХреНрд╖рд╛ рдХреЛ рдвреВрдВрдвреЗрдВ, рдкрд░рд┐рдгрд╛рдореА рд╕реВрдЪреА рд╕реЗ рдбреНрд░рд╛ рд╡рд┐рдзрд┐ рд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЯрд╛рдЗрдк рдбреА рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░реЗрдВред рдпрд╣ рдПрдХ рд╕рд░рд▓ рд╡рд┐рдзрд┐ рдЖрд╣реНрд╡рд╛рди рдХреЗ рд▓рд┐рдП рд╕рднреНрдп рдХрд╛рдо рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдмрд╣реБрд░реВрдкрддрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣ рдХреЗ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдУрдУрдкреА рднрд╛рд╖рд╛ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд┐рдзрд┐ рдкреНрд░реЗрд╖рдг - рд╕рд╛рд░рд╛рдВрд╢
- рдХреНрд▓рд╛рд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдбрд╛рдпрдиреЗрдорд┐рдХ рдбрд┐рд╕реНрдкреИрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рднреА рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдбрд╛рдпрдиреЗрдорд┐рдХ рдбрд┐рд╕реНрдкреИрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЕрдВрддрд┐рдо рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рд╣реЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рддрдм рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдЯреИрдЯрд┐рдХ рдбрд┐рд╕реНрдкреИрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░реЗрдЧрд╛ред
- рдЧреИрд░-рд╢реНрд░реЗрдгреА рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдПрдирдо рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ) рдФрд░ рд╕реНрдЯреЗрдЯрд┐рдХ рдбрд┐рд╕реНрдкреИрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ
OOP рд╕рдорд╕реНрдпрд╛рдПрдВ - рд╕рд╛рд░рд╛рдВрд╢
рдЗрд╕ рддрд░рд╣ рдХреЗ trifles рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
- рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╕рдордп: рдпрд╣ рдХрд╣рд╛рдБ рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛?
- рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп: рд▓рд┐рдВрдХрд┐рдВрдЧ рдХреЗ рдХрд╛рдо рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛?
- рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рддреЗ рд╕рдордп: рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?
рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рд╕рд╛рдХрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред
рдмрд╣реБрд░реВрдкрддрд╛ рдПрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬ рд╣реИред рдлрд┐рд▓рд╣рд╛рд▓, рдпрд╣ рд╕рдм рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдмрд╣реБрд░реВрдкрддрд╛ рд╕реАрдзреЗ рд╡рд░реНрдЧреЛрдВ рдФрд░ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╣рдо рдмрджрд▓реЗ рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрдХреНрд╖рд╛рдПрдВ рдзреАрдореА рдФрд░ рднрд╛рд░реА рд╣реИрдВ, рдФрд░ рд╕рдВрд░рдЪрдирд╛ рд╕рд░рд▓ рдФрд░ рдЖрд╕рд╛рди рд╣реИред рдХреНрдпрд╛ рдмрд╣реБрд░реВрдкрддрд╛ рдХреЛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреА рд╣реИред