рд╕реНрд╡рд┐рдлреНрдЯ: рдПрдЖрд░рд╕реА рдФрд░ рдореЗрдореЛрд░реА рдореИрдиреЗрдЬрдореЗрдВрдЯ

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

рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реАрдЦрдХрд░ рд╕реНрд╡рд┐рдлреНрдЯ рдФрд░ рдПрдЖрд░рд╕реА рдХреЗ рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ:

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

рд╢реБрд░реБрдЖрдд рд╣реЛ рд░рд╣реА рд╣реИ


рд╕реНрд░реЛрдд рд╕рд╛рдордЧреНрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ ред рдЪрдХреНрд░ / рд╕реНрдЯрд╛рд░реНрдЯрд░ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреЛрд▓реЗрдВред рд╣рдорд╛рд░реЗ рдЧрд╛рдЗрдб рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рдореБрдЦреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд╕рдордЭрддреЗ рд╣реБрдП, рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ MainViewController.swif рдЯреА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗ ред

рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ MainViewController.swift рдХреЗ рдиреАрдЪреЗ рдЬреЛрдбрд╝реЗрдВ:

class User { let name: String init(name: String) { self.name = name print("User \(name) was initialized") } deinit { print("Deallocating user named: \(name)") } } 

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

рдЕрдм MainViewController рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВред

рдЗрд╕ рдХреЛрдб рдХреЛ viewDidLoad () рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╣рд▓реЗ рд░рдЦреЗрдВ:

 let user = User(name: "John") 

рдРрдк рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдкреНрд░рд┐рдВрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб-рд╢рд┐рдлреНрдЯ-рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ Xcode рдХрдВрд╕реЛрд▓ рдмрдирд╛рдПрдВред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЙрди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрдВрд╕реЛрд▓ рдкрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдбрд┐рдирд┐рдЯ рдХреЗ рдЕрдВрджрд░ рдкреНрд░рд┐рдВрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛ред

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

рдХреНрдпрд╛ рд╡рд╣ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИ?


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

рдЪрд▓рд┐рдП рдореЗрди рд╡реНрдпреВ рдХреЙрдиреНрдЯреНрд░реЛрд▓рд░ рдХреНрд▓рд╛рд╕ рдХреЗ рдЕрдВрджрд░ рд░рдирд╕реЗрдирд╛рд░рд┐рдпреЛ () рд╡рд┐рдзрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдпреВрдЬрд░ рдХреНрд▓рд╛рд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред

 func runScenario() { let user = User(name: "John") } 

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

рдЕрдм runScenario рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ (рдЗрд╕реЗ viewDidLoad рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝рдХрд░) ():

 runScenario() 

рдРрдк рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЙрди рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛
рдбреАрд▓рдХреНрд▓реЛрдХреЗрдЯрд┐рдВрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо: рдЬреЙрди

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рджреЗрдЦрдиреЗ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИред

рд╡рд╕реНрддреБ рдЬреАрд╡рди рднрд░



рд╡рд╕реНрддреБ рдХрд╛ рдЕрд╕реНрддрд┐рддреНрд╡ рдкрд╛рдБрдЪ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ:

  • рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрди: рдвреЗрд░ рд╕реЗ рдпрд╛ рдвреЗрд░ рд╕реЗ
  • initialization: рдХреЛрдб рдХреЛ init рдХреЗ рдЕрдВрджрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  • рдХрд╛ рдЙрдкрдпреЛрдЧ
  • deinitialization: рдХреЛрдб рдХреЛ рдбреАрдЗрдирд┐рдЯ рдХреЗ рдЕрдВрджрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  • рдореБрдХреНрдд рдореЗрдореЛрд░реА: рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рд╕реНрдЯреИрдХ рдпрд╛ рд╣реАрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИ

рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдФрд░ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рдЪрд░рдгреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕реАрдзрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрдирд┐рдЯ рдФрд░ рдбрд┐рдирд┐рдЯ рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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



рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕рдХреА рд╕рдВрджрд░реНрдн рд╕рдВрдЦреНрдпрд╛ 1 рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред

RunScenario () рдХреЗ рдЕрдВрдд рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдВрджрд░реНрдн рд╕рдВрдЦреНрдпрд╛ 0. рддрдХ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдирдЗрдВрд╕реНрдЯрд╛рд▓реНрдпреВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдВрджрд░реНрдн рдЪрдХреНрд░


рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдЖрд░рд╕реА рдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдЬрдм рдЕрдкреНрд░рдпреБрдХреНрдд рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рддрдХ рдмрд┐рдирд╛ рд░реБрдХреЗ рд░рд╣рддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ! рд╕рдВрднрд╡ рд╕реНрдореГрддрд┐ рд▓реАрдХред

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



рдпрд╣ рдПрдХ рдордЬрдмреВрдд рд╕рдВрджрд░реНрдн рдЪрдХреНрд░ рд╣реИ ред рдпрд╣ рд╕реНрдерд┐рддрд┐ рдПрдЖрд░рд╕реА рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдореЗрдореЛрд░реА рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдВрдд рдореЗрдВ рд╕рдВрджрд░реНрдн рд╕рдВрдЦреНрдпрд╛ 0 рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрджреНрдпрдкрд┐ рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдСрдмреНрдЬреЗрдХреНрдЯ 1 рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ 2 рдХреЛ рдореБрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╣рдорд╛рд░реЗ рд▓рд┐рдВрдХ рджреЗрдЦреЗрдВ


рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдЗрд╕ рд╕рдм рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, MainViewController.swift рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдХреЗ рдмрд╛рдж рдпрд╣ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:

 class Phone { let model: String var owner: User? init(model: String) { self.model = model print("Phone \(model) was initialized") } deinit { print("Deallocating phone named: \(model)") } } 

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

рдЕрдм рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рд░рдирд╕реЗрдирд╛рд░рд┐рдпреЛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ ():

 let iPhone = Phone(model: "iPhone Xs") 

рдпрд╣ рдлрд╝реЛрди рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рджреЗрдЧрд╛ред

рдореЛрдмрд╛рдЗрд▓ рдкрдХрдбрд╝реЛ


рдЕрдм рдЗрд╕ рдХреЛрдб рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдирд╛рдо рд╕рдВрдкрддреНрддрд┐ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж:

 private(set) var phones: [Phone] = [] func add(phone: Phone) { phones.append(phone) phone.owner = self } 

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓реЗ рдлрд╝реЛрди рдХреА рдПрдХ рд╕рд░рдгреА рдЬреЛрдбрд╝реЗрдВред рд╕реЗрдЯрд░ рдХреЛ рдирд┐рдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрдб (рдлреЛрди :) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЙрди рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛
рдлрд╝реЛрди iPhone XS рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рдбреАрд▓рд▓реЛрдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдлреЛрди рдХрд╛ рдирд╛рдо: iPhone Xs
рдбреАрд▓рдХреНрд▓реЛрдХреЗрдЯрд┐рдВрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо: рдЬреЙрди

рдЕрдм рдЗрд╕реЗ рд░рдирд╕реЗрдирд╛рд░рд┐рдпреЛ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ ():
 user.add(phone: iPhone) 


рдпрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреЗ iPhone рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓реЗ рдлрд╝реЛрди рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдлрд╝реЛрди рдХреЗ рд╕реНрд╡рд╛рдореА рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ ' рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ ' рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдБред рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ iPhone рдСрдмреНрдЬреЗрдХреНрдЯ рд░рд┐рд▓реАрдЬрд╝ рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВред рдЙрдирдХреЗ рдмреАрдЪ рдордЬрдмреВрдд рд▓рд┐рдВрдХ рдХрд╛ рдЪрдХреНрд░ рдПрдЖрд░рд╕реА рдХреЛ рдЬрд╛рд░реА рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред



рдХрдбрд╝рд┐рдпрд╛рдБ рдХрдордЬреЛрд░


рдордЬрдмреВрдд рд▓рд┐рдВрдХ рдХреЗ рдЪрдХреНрд░ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рдХрдордЬреЛрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

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

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



рдЗрд╕ рдЪрд┐рддреНрд░рдг рдореЗрдВ, рдзрд░рд╛рд╢рд╛рдпреА рд░реЗрдЦрд╛рдПрдВ рдХрдордЬреЛрд░ рд▓рд┐рдВрдХ рджрд░реНрд╢рд╛рддреА рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ object1 рдХрд╛ рд╕рдВрджрд░реНрдн рдЧрдгрдирд╛ 1 рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗрд░рд┐рдПрдл 1 рдЗрд╕рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ 2 рдХрд╛ рд╕рдВрджрд░реНрдн рдЧрдгрдирд╛ 2 рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡реЗрд░рд┐рдПрдмрд▓ 2 рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ 1 рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рд╣реИред

object2 рднреА object1 рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди WEAK, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ object1 рдХреА рд╕рдВрджрд░реНрдн рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЬрдм variable1 рдФрд░ variable2 рдХреЛ рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ object1 рдореЗрдВ 0 рдХреА рд╕рдВрджрд░реНрдн рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдореБрдХреНрдд рдХрд░рддреА рд╣реИред рдпрд╣ рдмрджрд▓реЗ рдореЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ 2 рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрдмреВрдд рд╕рдВрджрд░реНрдн рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХреА рд░рд┐рд▓реАрдЬ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред

рдлрд╝реЛрди рд╡рд░реНрдЧ рдореЗрдВ, рд╕реНрд╡рд╛рдореА рдХреА рд╕рдВрдкрддреНрддрд┐ рдШреЛрд╖рдгрд╛ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрджрд▓реЗрдВ:

 weak var owner: User? 

рдорд╛рд▓рд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ 'рдХрдордЬреЛрд░' рдШреЛрд╖рд┐рдд рдХрд░рдХреЗ, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдлреЛрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдордЬрдмреВрдд рд▓рд┐рдВрдХ рдХреЗ рдкрд╛рд╢ рдХреЛ рддреЛрдбрд╝рддреЗ рд╣реИрдВред



рдРрдк рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдЕрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдлреЛрди рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рд╣реИрдВред

рдкреНрд░рд╕рд┐рджреНрдз рд▓рд┐рдВрдХ


рдПрдХ рдФрд░ рд▓рд┐рдВрдХ рд╕рдВрд╢реЛрдзрдХ рднреА рд╣реИ рдЬреЛ рд╕рдВрджрд░реНрдн рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рдЕрдЬреНрдЮрд╛рдд ред

рдЕрдирд╛рдо рдФрд░ рдХрдордЬреЛрд░ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреНрдпрд╛ рд╣реИ? рдПрдХ рдХрдордЬреЛрд░ рд╕рдВрджрд░реНрдн рд╣рдореЗрд╢рд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕рдВрджрд░реНрднрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд╛рд░реА рд╣реЛрдиреЗ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХрдордЬреЛрд░ рдЧреБрдгреЛрдВ рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред

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



рдЖрдЗрдП рдЬрд╛рдиреЗ рдЕрдирдЬрд╛рдиреЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

MainViewController.swift рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдирдпрд╛ рдХреИрд░рд┐рдпрд░ рд╕рджрд╕реНрдпрддрд╛ рд╡рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ:

 class CarrierSubscription { let name: String let countryCode: String let number: String let user: User init(name: String, countryCode: String, number: String, user: User) { self.name = name self.countryCode = countryCode self.number = number self.user = user print("CarrierSubscription \(name) is initialized") } deinit { print("Deallocating CarrierSubscription named: \(name)") } } 

рдХреИрд░рд┐рдпрд░рд╕реНрдХреНрд░рд┐рдкреНрд╕рди рдореЗрдВ рдЪрд╛рд░ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ:

рдирд╛рдо: рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдирд╛рдоред
рджреЗрд╢ рдХреЛрдб: рджреЗрд╢ рдХреЛрдбред
рдирдВрдмрд░: рдлреЛрди рдирдВрдмрд░ред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХред

рдЖрдкрдХрд╛ рдкреНрд░рджрд╛рддрд╛ рдХреМрди рд╣реИ?


рдирд╛рдо рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдмрд╛рдж рдЕрдм рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

 var subscriptions: [CarrierSubscription] = [] 

рдпрд╣рд╛рдВ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд░рдЦрддреЗ рд╣реИрдВред

рдЕрдм рдорд╛рд▓рд┐рдХ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдлрд╝реЛрди рд╡рд░реНрдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

 var carrierSubscription: CarrierSubscription? func provision(carrierSubscription: CarrierSubscription) { self.carrierSubscription = carrierSubscription } func decommission() { carrierSubscription = nil } 

рдпрд╣ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╕рд╛рде рдлреЛрди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдФрд░ рдЕрдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреИрд░рд┐рдпрд░ рд╕рджрд╕реНрдпрддрд╛ рдЧреБрдг рдФрд░ рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдЕрдм рдкреНрд░рд┐рдВрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ Init рдореЗрдердб рдХреЗ рдЕрдВрджрд░ CarrierSubscription рдХреНрд▓рд╛рд╕ рдЬреЛрдбрд╝реЗрдВ:

 user.subscriptions.append(self) 

рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреА рд╕рд░рдгреА рдореЗрдВ CarrierSubscription рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рдЕрдВрдд рдореЗрдВ, рд░рдирд╕реЗрдирд╛рд░рд┐рдпреЛ () рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝реЗрдВ:

 let subscription = CarrierSubscription( name: "TelBel", countryCode: "0032", number: "31415926", user: user) iPhone.provision(carrierSubscription: subscription) 

рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рджрд╕реНрдпрддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдлреЛрди рдХреЛ рдЙрд╕рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред

рдРрдк рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ:

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЙрди рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛
рдлрд╝реЛрди iPhone Xs рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рдХреИрд░рд┐рдпрд░рдмрд░реНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдЯреЗрд▓рдмреЗрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдФрд░ рдлрд┐рд░ рд╕реЗ рдПрдХ рд▓рд┐рдВрдХ рдЪрдХреНрд░! рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, iPhone рдФрд░ рд╕рджрд╕реНрдпрддрд╛ рдЕрдВрдд рдореЗрдВ рдореБрдХреНрдд рдирд╣реАрдВ рд╣реБрдПред

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ?



рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рддреЛрдбрд╝рдирд╛


рдпрд╛ рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рд▓реВрдк рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирдирд╛ рд╣реИред рдЖрдЗрдП рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдВред

рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рджрд╕реНрдпрддрд╛ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд - рдирд╣реАрдВ, рдПрдХ рдкреНрд░рджрд╛рддрд╛ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд┐рдирд╛ CarrierSubscription рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЗрд╕рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рд┐рдВрдХ рдХреЛ рдЕрдЬреНрдЮрд╛рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреИрд░рд┐рдпрд░ рдШреЛрд╖рдгрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдШреЛрд╖рдгрд╛ рдмрджрд▓реЗрдВ:

 unowned let user: User 

рдЕрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдЬреНрдЮрд╛рдд рд╣реИ, рдЬреЛ рд▓рд┐рдВрдХ рдХреЗ рд▓реВрдк рдХреЛ рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред



рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рд▓реВрдк рд▓рд┐рдВрдХ


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

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



рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж CarrierSubscription рдореЗрдВ рдпрд╣ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:

 lazy var completePhoneNumber: () -> String = { self.countryCode + " " + self.number } 

рдпрд╣ рдХреНрд▓реЛрдЬрд░ рдкреВрд░реНрдг рдЯреЗрд▓реАрдлреЛрди рдирдВрдмрд░ рдХреА рдЧрдгрдирд╛ рдФрд░ рд░рд┐рдЯрд░реНрди рдХрд░рддрд╛ рд╣реИред рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЖрд▓рд╕реА рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдкрд░ рд╕реМрдВрдкрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ self.countryCode рдФрд░ self.number рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╢реБрд░реБрдЖрддреА рдХреЛрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

RunScenario () рдХреЛ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

 print(subscription.completePhoneNumber()) 

рдХреЙрд▓рд┐рдВрдЧ рдХрдореНрдкреНрд▓реАрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред

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



рд╕реВрдЪреА рдкрд░ рдХрдмреНрдЬрд╛


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

рдХреИрдкреНрдЪрд░ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

 var x = 5 var y = 5 let someClosure = { [x] in print("\(x), \(y)") } x = 6 y = 6 someClosure() // Prints 5, 6 print("\(x), \(y)") // Prints 6, 6 

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

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

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

рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЬрдмреНрдд


рд╡рд╛рд╣рдХ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд╕рд╛рде FullPhoneNumber рдкрд░рд┐рднрд╛рд╖рд╛ рдмрджрд▓реЗрдВ:

 lazy var completePhoneNumber: () -> String = { [unowned self] in return self.countryCode + " " + self.number } 

рд╣рдо рдХреНрд▓реЛрдЬрд╝рд░ рдХреИрдкреНрдЪрд░ рд╕реВрдЪреА рдореЗрдВ [рдкреНрд░рд╕рд┐рджреНрдз рд╕реНрд╡рдпрдВ] рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдПрдХ рдордЬрдмреВрдд рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЕрдЬреНрдЮрд╛рдд рд▓рд┐рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЛ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреИрд░рд┐рдпрд░рд╕рд░реНрдХреНрд░рд┐рдкреНрд╢рди рдЕрдм рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрдкрд░реЛрдХреНрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдПрдХ рд▓рдВрдмреЗ рдФрд░ рдЕрдзрд┐рдХ рдкреВрд░реНрдг рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдирдпрд╛ рдЪрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ:

 var closure = { [unowned newID = self] in // Use unowned newID here... } 

рдпрд╣рд╛рдБ newID рд╕реНрд╡рдпрдВ рдХреА рдПрдХ рдЕрдЬреНрдЮрд╛рдд рдкреНрд░рддрд┐ рд╣реИред рдмрдВрдж рд╕реЗ рдкрд░реЗ, рд╕реНрд╡рдпрдВ рд╣реА рд░рд╣рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рджрд┐рдП рдЧрдП рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рдореЗрдВ, рд╣рдо рдПрдХ рдирдпрд╛ рд╕реЗрд▓реНрдл рд╡реЗрд░рд┐рдПрдмрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХреНрд▓реЛрдЬрд░ рдХреЗ рдЕрдВрджрд░ рдореМрдЬреВрдж рд╕реЗрд▓реНрдл рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред

рдзреНрдпрд╛рди рд╕реЗ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ


рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ, рд╕реНрд╡рдпрдВ рдФрд░ рдкреВрд░реНрдг рдлрд╝реЛрдирдлреЛрди рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХреЛ рдЕрдЬреНрдЮрд╛рдд рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рдЗрд╕ рдХреЛрдб рдХреЛ MainViewController.swift рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

 class WWDCGreeting { let who: String init(who: String) { self.who = who } lazy var greetingMaker: () -> String = { [unowned self] in return "Hello \(self.who)." } } 

рдЕрдм рдпрд╣рд╛рдБ рд░рдирд╕реЗрдирд╛рд░рд┐рдпреЛ рдХрд╛ рдЕрдВрдд рд╣реИ ():

 let greetingMaker: () -> String do { let mermaid = WWDCGreeting(who: "caffeinated mermaid") greetingMaker = mermaid.greetingMaker } print(greetingMaker()) // ! 

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдЖрдкрдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреНрд░реИрд╢ рдФрд░ рдРрд╕рд╛ рдХреБрдЫ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЙрди рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛
рдлрд╝реЛрди iPhone XS рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рдХреИрд░рд┐рдпрд░рдмрд░реНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдЯреЗрд▓рдмреЗрд▓ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╣реИ
0032 31415926
рдШрд╛рддрдХ рддреНрд░реБрдЯрд┐: рдПрдХ рдЕрдЬреНрдЮрд╛рдд рд╕рдВрджрд░реНрдн рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдСрдмреНрдЬреЗрдХреНрдЯ 0x600000f0de30 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреАрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛2019-02-24 12: 29: 40.744248-0600 рдЪрдХреНрд░ [33489: 5926466: рдШрд╛рддрдХ рддреНрд░реБрдЯрд┐: рдПрдХ рдЕрдЬреНрдЮрд╛рдд рд╕рдВрджрд░реНрдн рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдСрдмреНрдЬреЗрдХреНрдЯ 0x600000f0de30 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрд╕реНрд╡реАрдХреГрдд рдерд╛ред

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

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

рдЬрд╛рд▓ рдХреЛ рдирдХрд╛рд░рдирд╛


рдЗрд╕рдХреЗ рд╕рд╛рде WWDCGreeting рд╡рд░реНрдЧ рдореЗрдВ рдЧреНрд░реАрдЯрд┐рдВрдЧрдореЗрдХрд░ рдХреЛ рдмрджрд▓реЗрдВ:

 lazy var greetingMaker: () -> String = { [weak self] in return "Hello \(self?.who)." } 

рд╣рдордиреЗ рджреЛ рдХрд╛рдо рдХрд┐рдП: рдкрд╣рд▓рд╛, рд╣рдордиреЗ рдЕрдирдЬрд╛рдиреЗ рдХреЛ рдХрдордЬреЛрд░ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ред рджреВрд╕рд░реЗ, рдЪреВрдВрдХрд┐ рд╕реНрд╡рдпрдВ рдХрдордЬреЛрд░ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рд╕реНрд╡рдпрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? Xcode рдХреА рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ, рд╣рдо рдЗрд╕реЗ рдЬрд▓реНрдж рд╣реА рдареАрдХ рдХрд░ рджреЗрдВрдЧреЗред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдм рдХреНрд░реИрд╢ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдордЬреЗрджрд╛рд░ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ: "рд╣реЗрд▓реЛ рдиреАрд▓ред"

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

рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрд▓реЛрдЬрд░ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдмрджрд▓реЗрдВ:

 lazy var greetingMaker: () -> String = { [weak self] in guard let self = self else { return "No greeting available." } return "Hello \(self.who)." } 

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

Xcode 10 рдореЗрдВ рд▓рд┐рдВрдХ рд▓реВрдк рдХреА рддрд▓рд╛рд╢ рд╣реИ


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

рд╕рдВрдкрд░реНрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╕реНрдЯрд╛рд░реНрдЯрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреЛрд▓реЗрдВред

рдРрдк рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред



рдпрд╣ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдВрдкрд░реНрдХ рдкреНрд░рдмрдВрдзрдХ рд╣реИред рд╕рдВрдкрд░реНрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдХреБрдЫ рдирдП рдЬреЛрдбрд╝реЗред

рдлрд╝рд╛рдЗрд▓ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ:

ContactsTableViewController: рд╕рднреА рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
DetailViewController: рдЪрдпрдирд┐рдд рд╕рдВрдкрд░реНрдХ рдХреА рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рддрд╛ рд╣реИред
NewContactViewController: рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рд╕рдВрдкрд░реНрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
ContactTableViewCell: рд╕рдВрдкрд░реНрдХ рд╡рд┐рд╡рд░рдг рджрд┐рдЦрд╛рдиреЗ рд╡рд╛рд▓реА рддрд╛рд▓рд┐рдХрд╛ рд╕реЗрд▓ред
рд╕рдВрдкрд░реНрдХ: рд╕рдВрдкрд░реНрдХ рдореЙрдбрд▓ред
рдирдВрдмрд░: рдлреЛрди рдирдВрдмрд░ рдореЙрдбрд▓ред

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

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, Xcode 10 рдореЗрдВ рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЯреВрд▓ рд╣реИрдВред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдмрд╛рдИрдВ рдУрд░ рд╕реНрд╡рд╛рдЗрдк рдФрд░ рдбрд┐рд▓реАрдЯ рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 3-4 рд╕рдВрдкрд░реНрдХ рд╣рдЯрд╛рдПрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рд╣реИ рдирд╛?



рдпрд╣ рдХрд╣рд╛рдВ рдмрд╣рддрд╛ рд╣реИ?


рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЪрд▓ рд░рд╣рд╛ рд╣реЛ, рддреЛ рдбрд┐рдмрдЧ рдореЗрдореЛрд░реА рдЧреНрд░рд╛рдлрд╝ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:



рдбрд┐рдмрдЧ рдирд╛рд╡рд┐рдХ рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдореБрджреНрджреЛрдВ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВред рд╡реЗ рдмреИрдВрдЧрдиреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдлреЗрдж рд╡рд┐рд╕реНрдордпрд╛рджрд┐рдмреЛрдзрдХ рдЪрд┐рд╣реНрди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╣реИрдВ:



рдирд╛рд╡рд┐рдХ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╕рдВрдкрд░реНрдХ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдЪрдХреНрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ: рд╕рдВрдкрд░реНрдХ рдФрд░ рд╕рдВрдЦреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ, рдПрдХ рджреВрд╕рд░реЗ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░рддреЗ рд╣реБрдП, рдкрдХрдбрд╝ред



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

рдЖрдк рдЗрд╕ рд▓реВрдк рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВрдЧреЗ? рд╕рдВрдкрд░реНрдХ рд╕реЗ рдирдВрдмрд░ рд╕реЗ рд▓рд┐рдВрдХ рдпрд╛ рдирдВрдмрд░ рд╕реЗ рд╕рдВрдкрд░реНрдХ? рдХрдордЬреЛрд░ рдпрд╛ рдирд╛рдореА? рдкрд╣рд▓реЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЖрдЬрд╝рдорд╛рдПрдВ!

рдпрджрд┐ рдЖрдкрдХреЛ рд╕рд╣рд╛рдпрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ ...
2 рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИрдВ: рдпрд╛ рддреЛ рд╕рдВрдкрд░реНрдХ рд╕реЗ рдирдВрдмрд░ рдХреЛ рдХрдордЬреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдмрдирд╛рдПрдВ, рдпрд╛ рдирдВрдмрд░ рд╕реЗ рд╕рдВрдкрд░реНрдХ рд╕реЗ рдЕрдЬреНрдЮрд╛рддред

Apple рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдХреА рд╕рд▓рд╛рд╣ рд╣реИ рдХрд┐ рдореВрд▓ рд╡рд╕реНрддреБ рдХрд╛ "рдмрдЪреНрдЪреЗ" рдХрд╛ рдПрдХ рдордЬрдмреВрдд рд╕рдВрджрд░реНрдн рд╣реИ - рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдирд╣реАрдВред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рд╕рдВрдкрд░реНрдХ рдХреЛ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрдмреВрдд рд╕рдВрджрд░реНрдн рджреЗрддреЗ рд╣реИрдВ - рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЬреНрдЮрд╛рдд рд▓рд┐рдВрдХ:

 class Number { unowned var contact: Contact // Other code... } class Contact { var number: Number? // Other code... } 


рдмреЛрдирд╕: рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдФрд░ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЫреЛрд░реЛрдВред


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

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрдИ рдЪрдХреНрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реВрдк рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрдо рд╕реЗ рдХрдо 2 рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдЪрд╛рд╣рд┐рдПред

рдЖрдЗрдП рд╕рд╛рдЗрдХрд┐рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ MainViewController.swift рдХреЗ рдЕрдВрдд рдореЗрдВ рдпрд╣ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:

 struct Node { // Error var payload = 0 var next: Node? } 

рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛! рд╕рдВрд░рдЪрдирд╛ рдПрдХ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рд╣реИ рдФрд░ рд╕реНрд╡рдпрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЕрдиреНрдпрдерд╛, рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЕрдирдВрдд рдЖрдХрд╛рд░ рд╣реЛрдЧрд╛ред

рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдмрджрд▓реЗрдВред

 class Node { var payload = 0 var next: Node? } 

рдХрдХреНрд╖рд╛рдУрдВ (рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░) рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдХрд╛ рд╕рдВрджрд░реНрдн рдХрд╛рдлреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред

рдЕрдм рдЗрд╕реЗ MainViewController.swift рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

 class Person { var name: String var friends: [Person] = [] init(name: String) { self.name = name print("New person instance: \(name)") } deinit { print("Person instance \(name) is being deallocated") } } 

рдФрд░ рдпрд╣ рд░рдирд╕реЗрдирд╛рд░рд┐рдпреЛ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣реИ ():

 do { let ernie = Person(name: "Ernie") let bert = Person(name: "Bert") ernie.friends.append(bert) // Not deallocated bert.friends.append(ernie) // Not deallocated } 

рдРрдк рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рди рддреЛ ernie рдФрд░ рди рд╣реА рдмрд░реНрдЯ рдЬрд╛рд░реА рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рд▓рд┐рдВрдХ рдФрд░ рдЕрд░реНрде


рдпрд╣ рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдФрд░ рдПрдХ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕рдиреЗ рд▓рд┐рдВрдХ рдХреЗ рдПрдХ рд▓реВрдк рдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛ рд╣реИред

рдЗрд░реЗрдиреА рдФрд░ рдмрд░реНрдЯ рдЕрдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд░рд╣рддреЗ рд╣реИрдВ, рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдЕрдкрдиреЗ рджреЛрд╕реНрддреЛрдВ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрд░реЗ рд╕реНрд╡рдпрдВ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рд╣реИрдВред

рджреЛрд╕реНрддреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдЬреНрдЮрд╛рдд рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдФрд░ Xcode рдПрдХ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдПрдЧрд╛: рдЕрдорд╛рдиреНрдп рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕ рд▓реВрдк рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдЖрд╡рд░рдг рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд░рдгреА рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╡реНрдпрдХреНрддрд┐ рд╡рд░реНрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рднрд╛рд╖рд╛ рдЬреЛрдбрд╝реЗрдВ:

 class Unowned<T: AnyObject> { unowned var value: T init (_ value: T) { self.value = value } } 

рдлрд┐рд░ рд╡реНрдпрдХреНрддрд┐ рд╡рд░реНрдЧ рдореЗрдВ рджреЛрд╕реНрддреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдмрджрд▓реЗрдВ:

 var friends: [Unowned<Person>] = [] 

рдЕрдВрдд рдореЗрдВ, рд░рдирд╕реЗрдирд╛рд░рд┐рдпреЛ () рдореЗрдВ рдХрд░реЛ рдмреНрд▓реЙрдХ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 do { let ernie = Person(name: "Ernie") let bert = Person(name: "Bert") ernie.friends.append(Unowned(bert)) bert.friends.append(Unowned(ernie)) } 

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ, рдЕрдм ernie рдФрд░ рдмрд░реНрдЯ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рд╣реИрдВ!

рдорд┐рддреНрд░ рд╕рд░рдгреА рдЕрдм рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЕрдм рдкреНрд░рд╕рд┐рджреНрдз рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ рдЬреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд░реИрдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд╕реНрддреБрдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореВрд▓реНрдп рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 let firstFriend = bert.friends.first?.value // get ernie 

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


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

Apple: рдСрдЯреЛрдореИрдЯрд┐рдХ рд░реЗрдлрд░реЗрдВрд╕ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ

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


All Articles