рдореЛрдмрд╛рдЗрд▓ рдХрд╛ рд╡рд┐рдХрд╛рд╕ред рд╕реНрд╡рд┐рдлреНрдЯ: рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд░рд╣рд╕реНрдп

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



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

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

рдмрд╛рдж рдореЗрдВ рд▓реЗрдЦ рдореЗрдВ, рдХреНрд╖рдгреЛрдВ рдХреЛ рдзреАрд░реЗ-рдзреАрд░реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреНрд░рдХрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: рд╕рд░рд▓ рд╕реЗ рдФрд░ рдЕрдХреНрд╕рд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдореЗрдВ, рдЖрдк рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рдкреНрд░рд╢реНрди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрд╡реЗрджрдХ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕реНрддрд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВ - рдЬреВрдирд┐рдпрд░реНрд╕ рдХреЗ рд╕реНрддрд░ рд╕реЗ рд╡рд░рд┐рд╖реНрда рд╕реНрддрд░ рддрдХред

рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреНрдпрд╛ рд╣реИрдВ?


рдореЛрдмрд╛рдЗрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдХреНрд╕рд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдХреБрдЫ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 7 рдмрд┐рдВрджреБ рдорд┐рд▓рддреЗ рд╣реИрдВ:

  • рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрдИ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ
  • рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд░рд╛рдЬреНрдп рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ
  • рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЕрдиреНрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
  • рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рдВрд░рдЪрдирд╛рдУрдВ (рд╕рдВрд░рдЪрдирд╛), рд╡рд░реНрдЧреЛрдВ (рд╡рд░реНрдЧ), рдФрд░ рдЧрдгрдирд╛ (рдПрдирдо) рдкрд░ рд▓рд╛рдЧреВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рдХрд╛рд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП
  • рдЬреЗрдиреЗрд░рд┐рдХ-рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЖрдкрдХреЛ рдЙрдирдХреА рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рджреМрд░рд╛рди рдкреНрд░рдХрд╛рд░ рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмреАрдЪ рдЬрдЯрд┐рд▓ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ
  • рдкреНрд░реЛрдЯреЛрдХреЙрд▓ "рдордЬрдмреВрдд" рдпрд╛ "рдХрдордЬреЛрд░" рдЪрд░ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ
  • рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЧрдгрдирд╛ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
  • рд╡рд░реНрдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗрд╡рд▓ рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рд╕рднреА рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░ (рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЗрдВрдЯ) рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВред рд╕реНрд╡рд┐рдлреНрдЯ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ, рдпрд╣, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

public struct Int: FixedWidthInteger, SignedInteger { 

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

 public struct Dictionary<Key, Value> where Key: Hashable { 

рдЖрдорддреМрд░ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ, рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рд░ рдХреЛрдИ рд╡рдВрд╢рдЬ рд╡рд░реНрдЧ рд╕реЗ рдореВрд▓ рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдФрд░ рдЪрд░ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдХреЛ рдЬрд╛рдирддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдХреЛрдИ рднреА рдЙрд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реАрдХреЗ рдФрд░ рдЪрд░ рд░рдЦрдиреЗ рд╕реЗ рдордирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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

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

 protocol Employee { func work() var hours: Int { get } } 

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

 extension Employee { func work() { print ("do my job") } } 

рдЖрдк рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 extension Employee { var hours: Int { return 8 } } 

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

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

рдпрд╛ рдпрджрд┐ рд╣рдо рдХреБрдЫ рд╡рд░реНрдЧ рдпрд╛ рд╕рдВрд░рдЪрдирд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 class Programmer { var hours: Int = 24 } extension Programmer: Employee { } 

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдЪрд░ рдХрдордЬреЛрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред (рдХрдордЬреЛрд░ рдПрдХ рдмрджрд▓рд╛рд╡ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ)ред

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

 extension Array where Element: Equatable {   var areAllElementsEqualToEachOther: Bool {       if isEmpty {           return false       }       var previousElement = self[0]       for (index, element) in self.enumerated() where index > 0 {           if element != previousElement {               return false           }           previousElement = element       }       return true   } } [1,1,1,1].areAllElementsEqualToEachOther 

рдПрдХ рдЫреЛрдЯреА рд╕реА рдЯрд┐рдкреНрдкрдгреАред рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдЪрд░ рдФрд░ рдХрд╛рд░реНрдп рд╕реНрдерд┐рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

@ Objc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рдЬрд╛рдирдирд╛ рдЬрд░реВрд░реА рд╣реИ рдХрд┐ @ objc рд╕реНрд╡рд┐рдлреНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдХреЛрдб рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реЗ рд╣реИрдВред рд╕рдЦреНрддреА рд╕реЗ, рдЗрд╕ "рдЬрд╛рджреВ рд╢рдмреНрдж" рдХреЗ рд▓рд┐рдП @ objc рдореМрдЬреВрдж рд╣реИред рд▓реЗрдХрд┐рди рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рддрд╛ рд╣реИ

 @objc protocol Typable {   @objc optional func test()   func type() } extension Typable {   func test() {       print("Extension test")   }   func type() {       print("Extension type")   } } class Typewriter: Typable {   func test() {       print("test")   }   func type() {       print("type")   } } 


рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдФрд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╡рд╣реА рдПрдХрдорд╛рддреНрд░ рд░рд╛рд╕реНрддрд╛ рд╣реИред
 @objc protocol Dummy { } class DummyClass: Dummy { } 


рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ (@obj рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╡рдХ) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ, рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкрд░реАрдХреНрд╖рдг () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╣реИред рд▓реЗрдХрд┐рди рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЦрд╛рд▓реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗ рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 protocol Dummy { func ohPlease() } extension Dummy { func ohPlease() { } } 


рдЯрд╛рдЗрдк рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕


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

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

 protocol Person {    func work() } extension Person {   func work() {       print("Person")   } } class Employee { } extension Employee: Person {   func work() {       print("Employee")   } } 

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

 protocol Person { //     func work() //      } extension Person {   func work() {       print("Person")   } } class Employee { } extension Employee: Person {   func work() {       print("Employee")   } } let person: Person = Employee() person.work() //output: Person 


рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓


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

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

 protocol Printer {   associatedtype PrintableClass: Hashable   func printSome(printable: PrintableClass) } extension Printer {   func printSome(printable: PrintableClass) {       print(printable.hashValue)   } } class TheIntPrinter: Printer {   typealias PrintableClass = Int } let intPrinter = TheIntPrinter() intPrinter.printSome(printable: 0) let intPrinterError: Printer = TheIntPrinter() //   

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

рд╡рд░реНрдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓


рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдХреНрд▓рд╛рд╕-рдмрд╛рдЙрдВрдб рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рднреА рд╣реИрдВред рдЙрдирдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 protocol Employee: AnyObject { } 

рдпрд╛

 protocol Employee: class { } 

рднрд╛рд╖рд╛ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдорддреБрд▓реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрд▓рд╛рд╕ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЗрд╕ рдЬрдЧрд╣ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, AnyObject рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬреЛ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИред

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

 protocol Handler: class {} class Presenter: Handler { weak var renderer: Renderer?  } protocol Renderer {} class View: Renderer { } 

рдирдордХ рдХреНрдпрд╛ рд╣реИ?

рдЖрдИрдУрдПрд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдВрджрд░реНрдн рдЧрдгрдирд╛ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдордЬрдмреВрдд рдФрд░ рдХрдордЬреЛрд░ рд▓рд┐рдВрдХ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ред рдФрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреМрди рд╕реЗ - рдордЬрдмреВрдд (рдордЬрдмреВрдд) рдпрд╛ рдХрдордЬреЛрд░ (рдХрдордЬреЛрд░) - рдЪрд░ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

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

 protocol Handler {} class Presenter: Handler { var renderer: Renderer? } protocol Renderer {} class View: Renderer { var handler: Handler? } 

рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрд╡рд┐рдлреНрдЯ рд╡рд░реНрдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╢реБрд░реВ рдореЗрдВ "рдХрдордЬреЛрд░" рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХреНрд▓рд╛рд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХрдордЬреЛрд░ рд╕рдВрджрд░реНрдн рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬрд╣рд╛рдВ рдпрд╣ рдЕрдХреНрд╕рд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

 protocol TableDelegate: class {} class Table {   weak var tableDelegate: TableDelegate? } 

рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдЬрд╣рд╛рдВ рдХреНрд▓рд╛рд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдПрдХрд╛рдзрд┐рдХ рд╡рд┐рдзрд┐ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдФрд░ рдкреНрд░реЗрд╖рдг


рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрдИ рдмрд╛рд░ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣ рд╣реИ,

 protocol Pet {   func waitingForItsOwner() } protocol Sleeper {   func sleepOnAChair() } class Kitty: Pet, Sleeper {   func eat() {       print("yammy")   }   func waitingForItsOwner() {       print("looking at the door")   }   func sleepOnAChair() {       print("dreams")   } } 

рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдиреБрдХрд╕рд╛рди рдЫрд┐рдкреЗ рд╣реБрдП рд╣реИрдВ? рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХрдард┐рдирд╛рдЗрдпреЛрдВ, рдХрдо рд╕реЗ рдХрдо рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдкреНрд░реЗрд╖рдг (рд╡рд┐рдзрд┐ рдкреНрд░реЗрд╖рдг) рдХреЗ рдХрд╛рд░рдг рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ - рдорд╛рддрд╛-рдкрд┐рддрд╛ рдпрд╛ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХрд╛рд░ рд╕реЗред

рдКрдкрд░, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ; рдпрд╣ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕реА рдХрд┐ рдЙрдореНрдореАрдж рдереАред

 protocol Pet {   func waitingForItsOwner() } extension Pet { func waitingForItsOwner() { print("Pet is looking at the door") } } class Kitty: Pet { func waitingForItsOwner() { print("Kitty is looking at the door") } } let kitty: Pet = Kitty() kitty.waitingForItsOwner() // Output: Kitty is looking at the door 

рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ "рдЬрд╛рджреВ" рд╣реЛрддрд╛ рд╣реИред рддрдереНрдп рдХреА рдмрд╛рдд рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХрд╛ рдПрдХ рдкреНрд░рд╢реНрди рд╣реИ: "рдХрд┐рд╕реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП?"

 protocol Pet { } extension Pet { func waitingForItsOwner() { print("Pet is looking at the door") } } class Kitty: Pet { func waitingForItsOwner() { print("Kitty is looking at the door") } } let kitty: Pet = Kitty() kitty.waitingForItsOwner() // Output: Pet is looking at the door 

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

 protocol Pet { } extension Pet { func waitingForItsOwner() { print("Pet is looking at the door") } } class Kitty: Pet { func waitingForItsOwner() { print("Kitty is looking at the door") } } let kitty = Kitty() kitty.waitingForItsOwner() // Output: Kitty is looking at the door 

рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╕рдордп рдпрд╣ рд╕рднреА рд╕реНрдЯреИрдЯрд┐рдХ рдкреНрд░реЗрд╖рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдФрд░ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдпрд╣рд╛рдБ рдХрдИ рд╡рд┐рд░рд╛рд╕рдд рд╣реИ? рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде: рдпрджрд┐ рдЖрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рджреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдХрд╛рд░реНрдп рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдбрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ C ++ рд╕реЗ рдХрдИ рд╡рд┐рд░рд╛рд╕рдд рдХреА рдЧреВрдВрдЬ рд╣реИред

 protocol Pet {   func waitingForItsOwner() } extension Pet {   func yawn() { print ("Pet yawns") } } protocol Sleeper {   func sleepOnAChair() } extension Sleeper {   func yawn() { print ("Sleeper yawns") } } class Kitty: Pet, Sleeper {   func eat() {       print("yammy")   }   func waitingForItsOwner() {       print("looking at the door")   }   func sleepOnAChair() {       print("dreams")   } } let kitty = Kitty() kitty.yawn() 

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

 protocol Pet {   func waitingForItsOwner() } extension Pet {   func yawn() { print ("Pet yawns") } } protocol Cat {   func walk() } extension Cat {   func yawn() { print ("Cat yawns") } } class Kitty:Cat {   func eat() {       print("yammy")   }   func waitingForItsOwner() {       print("looking at the door")   }   func sleepOnAChair() {       print("dreams")   } } let kitty = Kitty() 

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

рдЬреЗрдирд░рд┐рдХ рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓


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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рдВрднрд╡ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рдкрд░реАрдХреНрд╖рдг рдХреЗрд╡рд▓ рд╕реНрд╡рд┐рдлреНрдЯ 4.2 рдореЗрдВ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдХреЗрд╡рд▓ рдЧрд┐рд░рд╛рд╡рдЯ рдореЗрдВ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рд╕реНрд╡рд┐рдлреНрдЯ 4.1 рдкрд░, рдПрдХ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЕрд╡рд╕рд░ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред

 protocol Property { } protocol PropertyConnection { } class SomeProperty { } extension SomeProperty: Property { } extension SomeProperty: PropertyConnection { } protocol ViewConfigurator { } protocol Connection { } class Configurator<T> where T: Property {   var property: T   init(property: T) {       self.property = property   } } extension Configurator: ViewConfigurator { } extension Configurator: Connection where T: PropertyConnection { } [Configurator(property: SomeProperty()) as ViewConfigurator]   .forEach { configurator in   if let connection = configurator as? Connection {       print(connection)   } } 

рд╕реНрд╡рд┐рдлреНрдЯ 4.1 рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ:

 warning: Swift runtime does not yet support dynamically querying conditional conformance ('__lldb_expr_1.Configurator<__lldb_expr_1.SomeProperty>': '__lldb_expr_1.Connection') 

рдЬрдмрдХрд┐ рд╕реНрд╡рд┐рдлреНрдЯ 4.2 рдореЗрдВ рд╕рдм рдХреБрдЫ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

 __lldb_expr_5.Configurator<__lldb_expr_5.SomeProperty> connection 

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

 protocol ObjectConfigurator { } protocol Property { } class FirstProperty: Property { } class SecondProperty: Property { } class Configurator<T> where T: Property {   var properties: T   init(properties: T) {       self.properties = properties   } } extension Configurator: ObjectConfigurator where T == FirstProperty { } //   : // Redundant conformance of 'Configurator<T>' to protocol 'ObjectConfigurator' extension Configurator: ObjectConfigurator where T == SecondProperty { } 

рд▓реЗрдХрд┐рди, рдЗрди рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЬреЗрдирд░рд┐рдХ рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рджреЗрдирд╛


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

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


All Articles