рдЖрдзреБрдирд┐рдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рднрд╛рд╖рд╛ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ,
рд╕реНрд╡рд┐рдлреНрдЯ рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддреА рд╣реИ, рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдФрд░ рдореБрдХреНрдд рдХрд░рддреА рд╣реИред рдпрд╣ рдПрдХ рддрдВрддреНрд░ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ
рдСрдЯреЛрдореИрдЯрд┐рдХ рд░реЗрдлрд░реЗрдВрд╕ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рдпрд╛
рдПрдЖрд░рд╕реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ, рдЖрдк рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ 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()
x рдХреНрд▓реЛрдЬрд░ рдХреИрдкреНрдЪрд░ рд╕реВрдЪреА рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП x рдХрд╛ рдорд╛рди рдХреНрд▓реЛрдЬрд░ рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред
y рдХреИрдкреНрдЪрд░ рд╕реВрдЪреА рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ y рдХрд╛ рдореВрд▓реНрдп рд╡рд╣ рд╣реЛрдЧрд╛ рдЬреЛ рдЙрд╕ рд╕рдордп рд╕рд░реНрдХрд┐рдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред
рд▓реЙрдХ рд╕реВрдЪрд┐рдпрд╛рдБ рд▓реВрдк рдХреЗ рднреАрддрд░ рдХреИрдкреНрдЪрд░ рдХреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХрдордЬреЛрд░ рдпрд╛ рдЕрдЬреНрдЮрд╛рдд рдмрд╛рддрдЪреАрдд рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдХрд▓реНрдк рдЕрдЬреНрдЮрд╛рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╣рдХ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдЬрд╛рд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рдмрдВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЬрдмреНрдд
рд╡рд╛рд╣рдХ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд╕рд╛рде FullPhoneNumber рдкрд░рд┐рднрд╛рд╖рд╛ рдмрджрд▓реЗрдВ:
lazy var completePhoneNumber: () -> String = { [unowned self] in return self.countryCode + " " + self.number }
рд╣рдо рдХреНрд▓реЛрдЬрд╝рд░ рдХреИрдкреНрдЪрд░ рд╕реВрдЪреА рдореЗрдВ
[рдкреНрд░рд╕рд┐рджреНрдз рд╕реНрд╡рдпрдВ] рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдПрдХ рдордЬрдмреВрдд рдХреЗ рдмрдЬрд╛рдп рдПрдХ
рдЕрдЬреНрдЮрд╛рдд рд▓рд┐рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ
рд╕реНрд╡рдпрдВ рдХреЛ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреИрд░рд┐рдпрд░рд╕рд░реНрдХреНрд░рд┐рдкреНрд╢рди рдЕрдм рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрдкрд░реЛрдХреНрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдПрдХ рд▓рдВрдмреЗ рдФрд░ рдЕрдзрд┐рдХ рдкреВрд░реНрдг рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдирдпрд╛ рдЪрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ:
var closure = { [unowned newID = self] in
рдпрд╣рд╛рдБ 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
рдмреЛрдирд╕: рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдФрд░ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЫреЛрд░реЛрдВред
рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ (рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рдХреНрд▓реЛрдЬрд░) рдФрд░ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ (рд╕рдВрд░рдЪрдирд╛рдПрдВ, рдЧрдгрдирд╛) рд╣реИрдВред рдЬрдм рдЗрд╕реЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдФрд░ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рди рдорд╛рди рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрдИ рдЪрдХреНрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реВрдк рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрдо рд╕реЗ рдХрдо 2 рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдЪрд╛рд╣рд┐рдПред
рдЖрдЗрдП рд╕рд╛рдЗрдХрд┐рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ MainViewController.swift рдХреЗ рдЕрдВрдд рдореЗрдВ рдпрд╣ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
struct 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)
рдРрдк рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рди рддреЛ 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
рдирд┐рд╖реНрдХрд░реНрд╖
рдЕрдм рдЖрдкрдХреЛ рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди рдХреА рдЕрдЪреНрдЫреА рд╕рдордЭ рд╣реИ рдФрд░ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдЖрд░рд╕реА рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд╢рди рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдерд╛ред
Apple: рдСрдЯреЛрдореИрдЯрд┐рдХ рд░реЗрдлрд░реЗрдВрд╕ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ