
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдПрдлрдкреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреИрд╕реЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИ: рд▓реЗрдЦрди, рдкрдврд╝рдирд╛, рд╕реНрдЯреНрд░реАрдо, рдХреЛрдб, рдЯреЗрд╕реНрдЯ, рдмрд┐рд▓реНрдб рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╛рд▓ рдореБрд▓рд╛рдпрдо рдФрд░ рд░реЗрд╢рдореА рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ ред
рдПрдХ рджреЛрд╖ рдЙрдЪреНрдЪ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕реАрдорд╛ рд╣реИред рдПрдлрдкреА рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореБрдЭреЗ рднрд╛рд░реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╕рд┐рджреНрдзрд╛рдВрдд, рдлрдВрдХреНрд╢рдВрд╕, рдореЛрдирд╛рдбреНрд╕, рд╢реНрд░реЗрдгреА рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рдмреАрдЬреАрдп рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдорд┐рд▓реЗ рд╣реИрдВред рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╡рд╛рдпреБрд╕реЗрдирд╛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рдереЗ - рд╣рд╛рд╕реНрдХреЗрд▓ рдФрд░ рд░реЙрдХред
рдлрд┐рд░ рдореИрдВрдиреЗ рд╢реБрд░реВ рд╕реЗ рд╣реА рдПрдлрдкреА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдФрд░ рдХреЛрдбрдлреЗрд╕реНрдЯ рдХреЛ рдмрддрд╛рдпрд╛ рдХрд┐ рдПрдлрдкреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдФрд░ рднреА рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ: рд╢реБрджреНрдз рдХрд╛рд░реНрдп рдФрд░ рд░рд╛рдЬреНрдпреЛрдВ рдХреА рдХрдореА
рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкреНрд░рддрд┐рдорд╛рди рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдпрд╣ рдПрдХ рдЖрд╕рд╛рди рдХрд╛рдо рдирд╣реАрдВ рд╣реИред рдкреНрд░рддрд┐рдорд╛рдиреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рджрд╢рдХреЛрдВ рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдпреЛрдВ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЕрд╕рдВрддреБрд╖реНрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд╛рд▓реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕рдиреНрдирд┐рд╣рд┐рдд рд╣реИрдВ, рдФрд░ рдФрдЬрд╛рд░реЛрдВ рд╕реЗ рдШрд┐рд░реЗ рд╣реИрдВред рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдорд╛рдиреЛрдВ рдХрд╛ рдПрдХ рдЕрднрд┐рдиреНрди рдЕрдВрдЧ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рдирд╣реАрдВ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рддреАрди рд╕реНрддрдВрднреЛрдВ рдкрд░ рдЦрдбрд╝реА рд╣реЛрддреА рд╣реИ - рд╡рд┐рд░рд╛рд╕рдд, рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдФрд░ рдмрд╣реБрд░реВрдкрддрд╛ред рд▓реЗрдХрд┐рди рдПрдиреНрдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдФрд░ рдмрд╣реБрд░реВрдкрддрд╛ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рд╕рдорд╛рди рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛ рдмрдВрдж - рд╡реЗ рд╢реБрджреНрдз рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкреИрджрд╛ рд╣реБрдП рдереЗ, рд▓реЗрдХрд┐рди рдФрджреНрдпреЛрдЧрд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЗрддрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкреНрд░рд╡рд╛рд╕ рдХрд┐рдпрд╛ рдХрд┐ рд╡реЗ рдПрдлрдкреА рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдирд╣реАрдВ рд░рд╣ рдЧрдПред рдореЛрдирд╛рдбреНрд╕ рднреА рдФрджреНрдпреЛрдЧрд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓реЛрдЧреЛрдВ рдХреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЕрднреА рднреА рд╕рд╢рд░реНрдд рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдЙрдирдХреА рд╕рджрд╕реНрдпрддрд╛ рдирд╣реАрдВ рдЦреЛрдИ рд╣реИред
рдирддреАрдЬрддрди, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рддрд┐рдорд╛рди рдХреНрдпрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдореИрдВ 2019 рдореЗрдВ рдХреЛрдбрдлреЗрд╕реНрдЯ рдореЗрдВ рдЖрдпрд╛, рдЬрд╣рд╛рдВ рд╕рднреА рдПрдлрдкреА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреЛрд▓рддреЗ рд╣реБрдП, рд╡рд┐рднрд┐рдиреНрди рдЪреАрдЬреЛрдВ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд╡рд┐рдХрд┐ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд╕рдВрдж рдЖрдИ:
"рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрд╕рддрдд рдЧрдгрд┐рдд рдФрд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рддрд┐рдорд╛рди рдХрд╛ рдПрдХ рдЦрдВрдб рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЧрдгрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреА рдЧрдгрд┐рддреАрдп рд╕рдордЭ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЙрдкрдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд)ред"
рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдп рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗрд╡рд▓ рдЙрд╕ рдбреЗрдЯрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреЛрдб рдХреА рдЪрд╛рд░ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдЧрдгрд┐рддреАрдп рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
func summ(a: Int, b: Int) -> Int { return a + b } let x = summ(a: 2, b: 3)
рдЗрдирдкреБрдЯ рддрд░реНрдХреЛрдВ 2 рдФрд░ 3 рдХреЗ рд╕рд╛рде рдпреЛрдЧ рд╕рдорд╛рд░реЛрд╣, рд╣рдо 5 рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдо, рдереНрд░реЗрдб, рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕реНрдерд╛рди рдмрджрд▓реЗрдВ - рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд░рд╣реЗрдЧрд╛ред
рдФрд░ рдПрдХ рдЧреИрд░-рдЧрдгрд┐рддреАрдп рдлрд╝рдВрдХреНрд╢рди рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХрд╣реАрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
var z = 5
рдпреЛрдЧ рдлрд╝рдВрдХреНрд╢рди рдЕрдм рдЗрдирдкреБрдЯ рддрд░реНрдХреЛрдВ рдФрд░ z рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
func summ(a: Int, b: Int) -> Int { return a + b + z } let x = summ(a: 2, b: 3)
рд╡реИрд╢реНрд╡рд┐рдХ рд░рд╛рдЬреНрдп рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдмрдврд╝ рдЧрдИред рдЕрдм рдПрдХреНрд╕ рдХреЗ рдореВрд▓реНрдп рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреБрдорд╛рдирд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдЬрдм рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рд▓рдЧрд╛рддрд╛рд░ рдмрджрд▓рддрд╛ рд░рд╣реЗрдЧрд╛ред рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ 10 рдмрд╛рд░ рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╣рд░ рдмрд╛рд░ рд╣рдо рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЧреИрд░-рдЧрдгрд┐рддреАрдп рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг:
func summ(a: Int, b: Int) -> Int { z = b - a return a + b }
рдЗрдирдкреБрдЯ рддрд░реНрдХреЛрдВ рдХреЗ рдпреЛрдЧ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлрд╝рдВрдХреНрд╢рди рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ z рдмрджрд▓рддрд╛ рд╣реИред рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдПрдХ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рд╣реИред
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╢рдмреНрдж рд╣реИ - рд╢реБрджреНрдз рдХрд╛рд░реНрдпред рдПрдХ рд╢реБрджреНрдз рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ рдХреЗ рд╕рдорд╛рди рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рд╢реБрджреНрдз рдХрд╛рд░реНрдп рдПрдлрдкреА рдХреА рдЖрдзрд╛рд░рд╢рд┐рд▓рд╛ рд╣реИрдВ, рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЧреМрдг рд╣реИред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐, рдЗрд╕ рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рдмрд╛рдж, рд╣рдо рдХреЗрд╡рд▓ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдпрджрд┐ рдЖрдк рд╡реИрд╢реНрд╡рд┐рдХ рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░рддрд┐рдорд╛рди рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рд╕рдВрд░рдЪрдирд╛рдПрдВ
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдПрдлрдкреА рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдФрд░ рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдХреЗрд╡рд▓ рдУрдУрдкреА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХрдХреНрд╖рд╛рдПрдВ рднреА рдПрдлрдкреА рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрддреА рд╣реИрдВред рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЖрдЗрдП рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ, "рд╕рд╛рдл"ред
рдПрдХ "рд╢реБрджреНрдз" рд╡рд░реНрдЧ рдПрдХ рд╡рд░реНрдЧ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рднреА рддрд░реАрдХреЗ рд╢реБрджреНрдз рдХрд╛рд░реНрдп рд╣реИрдВ, рдФрд░ рдЧреБрдг рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВред (рдпрд╣ рдПрдХ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд╢рдмреНрдж рд╣реИ, рдЬреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХреА рддреИрдпрд╛рд░реА рдореЗрдВ рдЧрдврд╝рд╛ рдЧрдпрд╛ рд╣реИ)ред
рдЗрд╕ рд╡рд░реНрдЧ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
class User { let name: String let surname: String let email: String func getFullname() -> String { return name + " " + surname } }
рдЗрд╕реЗ рдбрд╛рдЯрд╛ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ...
class User { let name: String let surname: String let email: String }
рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
func getFullname() -> String { return name + " " + surname }
рдПрдлрдкреА рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрджрд┐рдо рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред
рдореВрд▓реНрдп рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рдиреНрдпрд╛ред
let ivan = User( name: "", surname: "", email: "ivanov@example.com" )
рдЗрд╕рдХреЗ рд▓рд┐рдП getFullname рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░реЗрдВред
let fullName = ivan.getFullname()
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдПрдХ рдирдпрд╛ рдорд╛рди рдорд┐рд▓рддрд╛ рд╣реИ - рдкреВрд░реНрдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдоред рдЪреВрдВрдХрд┐ рдЖрдк ivan рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП getFullname рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реИред
рдмреЗрд╢рдХ, рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ: "рдПрдХ рдорд┐рдирдЯ рд░реБрдХреЛ, getFullname рд╡рд┐рдзрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИ - рд╡рд░реНрдЧ рдЧреБрдг, рддрд░реНрдХ рдирд╣реАрдВред" рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рд╕рд┐рд░реНрдл рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрд╡рд┐рдлреНрдЯ рднреА рдЗрд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ:
let fullName = User.getFullname(ivan)()
рдЕрдЧрд░ рд╣рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреБрдЫ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдИрдореЗрд▓, рддреЛ рд╣рдореЗрдВ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рдиреА рд╣реЛрдЧреАред рдпрд╣ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
class User { let name: String let surname: String let email: String func change(email: String) -> User { return User(name: name, surname: surname, email: email) } } let newIvan = ivan.change(email: "god@example.com")
рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЧреБрдг
рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрд╛ рдерд╛ рдХрд┐ рдПрдХ рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдЙрдкрдХрд░рдг, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреНрдп рдкреНрд░рддрд┐рдорд╛рдиреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдиреНрдпрд╛рд╕реА рдХреЗ рджреМрд░рд╛рди рдореЛрдиреИрдбреНрд╕, рдмреАрдЬреАрдп рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди, рд╕рдЦреНрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ, рдЖрд╢реНрд░рд┐рдд рдкреНрд░рдХрд╛рд░, рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рддреНрдпрд╛рдкрди рдХреЛ рдПрдлрдкреА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрдирдореЗрдВ рд╕реЗ рдХрдИ рдЙрдкрдХрд░рдг рд╣рдо рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдордЬрдмреВрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд╕реНрд╡рд┐рдлреНрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдордЭрдиреЗ рдпрд╛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╕ рдЙрдирдХреЗ рдкрд╛рд╕ рд╣реИред
рдХреЛрдИ рдирд┐рд░реНрднрд░ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдИрдореЗрд▓, рдПрдХ рд╕рд░рдгреА рд╣реИ, рдХрд┐ рдпрд╣ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рдПрдХ рд╢рдмреНрджрдХреЛрд╢, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдРрдкреНрдкрд▓ рдХреА рд╣реИред рд╡реИрд╕реЗ, рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдХреЛрдИ рдирд┐рд░реНрднрд░ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред
рдмреАрдЬрдЧрдгрд┐рддреАрдп рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдФрд░ рдпрд╣ рдПрдХ рд╢рд╛рдВрдд, рд▓реЗрдХрд┐рди рдЧрдгрд┐рддреАрдп рдЪреАрдЬрд╝ рдХреЛ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд╕реБрдВрджрд░рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Int, enum, Optional, Hashable рдмреАрдЬреАрдп рдкреНрд░рдХрд╛рд░ рд╣реИрдВред рдФрд░ рдпрджрд┐ рдЗрдВрдЯ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╣реИ, рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ рд╣реИ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдирдо, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рд╕рд╛рд╣рдЪрд░реНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣рд░ рдЬрдЧрд╣ рд╕реЗ рджреВрд░ рд╣реИрдВред
рд╕рдВрдХрд▓рди рд╕рддреНрдпрд╛рдкрди рдХреЛ рдЕрдХреНрд╕рд░ рдЬрдВрдЧ рдпрд╛ рд╣реИрд╕реЗрд▓ рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╕рдордп рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рднрд╛рд╖рд╛ рдЗрддрдиреА рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рд╕рднреА рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рдВрдЪреЗ рдЬрд╛ рд╕рдХреЗрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдХреЛрдИ рднреА рд╡рд┐рд╡рд╛рдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рддрд░реНрдХ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдЧрд┐рд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рд╕рд░реНрд╡рд░ рдиреЗ рдЙрд╕ рдЧрд▓рдд рдЙрддреНрддрд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдЧрд┐рдирддреА рдХрд░ рд░рд╣реЗ рдереЗ, рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕рдХреА рдЬрдиреНрдо рддрд┐рдерд┐ рджрд░реНрдЬ рдХреА, рди рдХрд┐ рдПрдХ рд╕рдВрдЦреНрдпрд╛ред
рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рд╕реНрд╡рд┐рдлреНрдЯ рдХреЛрдб рдХрд╛ рд╕рдВрдХрд▓рди рд╕рднреА рдХреАрдбрд╝реЗ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрдореЛрд░реА рд░рд┐рд╕рд╛рд╡ рдХреЛ рд░реЛрдХрдирд╛ рдЖрд╕рд╛рди рд╣реИред рд▓реЗрдХрд┐рди рдордЬрдмреВрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдФрд░ рдСрдкреНрд╢рдирд▓ рдмрд╣реБрдд рд╕рд╛рд░реА рдмреЗрд╡рдХреВрдлрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИред рдореБрдЦреНрдп рдмрд╛рдд рдордЬрдмреВрд░ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рд╣реИред
рдореЛрдирд╛рдбреНрд╕: рдПрдлрдкреА рдкреНрд░рддрд┐рдорд╛рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЙрдкрдХрд░рдг (рд╡реИрдХрд▓реНрдкрд┐рдХ)
рдЕрдХреНрд╕рд░, рдПрдлрдкреА рдФрд░ рдореЛрдирд╛рдб рдПрдХ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдПрдХ рд╕рдордп рдореЗрдВ, рдореИрдВрдиреЗ рдпрд╣ рднреА рд╕реЛрдЪрд╛ рдХрд┐ рднрд┐рдХреНрд╖реБ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣реИрдВред рдЬрдм рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рд╕рдордЭрд╛ (рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ), рдореИрдВрдиреЗ рдХрдИ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реЗ:
- рд╡реЗ рд╕рд░рд▓ рд╣реИрдВ;
- рд╡реЗ рд╕рд╣рдЬ рд╣реИрдВ;
- рдЙрдиреНрд╣реЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдордЭреЗрдВ, рдпрд╣ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ;
- рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдирдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЛ рдорд╛рдирдХ рдореЛрдирдб рд╣реИрдВ - рд╡реИрдХрд▓реНрдкрд┐рдХ рдФрд░ рдкрд░рд┐рдгрд╛рдоред рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдВрднрд╡ рд╢реВрдиреНрдп рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо - рд╡рд┐рднрд┐рдиреНрди рдЕрд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗред
рдЧреИрд░рдмрд░рд╛рдмрд░реА рдХреЗ рдмрд┐рдВрджреБ рдкрд░ рд▓рд╛рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╣реИрдВ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдФрд░ рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рджреВрд╕рд░рд╛ рд╢реВрдиреНрдп рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЙрджреНрджреЗрд╢реНрдп-рд╕реА-рд╕рдордп рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╣рд┐рдд рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
func getIntFromDB() -> Int func getIntFromServer() -> Int!
рд╣рдо рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЗрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
func summInts() -> Int! { let intFromDB = getIntFromDB() let intFromServer = getIntFromServer()! let summ = intFromDB + intFromServer return summ }
рд╣рдо рдЕрдВрддрд┐рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
let result = summInts() print(result)
рдХреНрдпрд╛ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХрд╛рдо рдХрд░реЗрдЧрд╛? рдЦреИрд░, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рдо рджреБрд░реНрдШрдЯрдирд╛ рдХреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рд╣реИред рдпрд╣ рдХреЛрдб рдЕрдЪреНрдЫрд╛ рд╣реИ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдорд╛рд░реЗ рдЗрд░рд╛рджреЛрдВ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ (рд╣рдореЗрдВ рдХреБрдЫ рджреЛ рдирдВрдмрд░реЛрдВ рдХреЗ рдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) рдФрд░ рдЗрд╕рдореЗрдВ рдХреБрдЫ рднреА рдЕрддрд┐рд╢реНрдпреЛрдХреНрддрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╣ рдЦрддрд░рдирд╛рдХ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреЗрд╡рд▓ рдЬреВрдирд┐рдпрд░реНрд╕ рдФрд░ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рд╕реЗ рднрд░реЗ рд▓реЛрдЧ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдмрджрд▓реЗрдВред
func getIntFromDB() -> Int func getIntFromServer() -> Int? func summInts() -> Int? { let intFromDB = getIntFromDB() let intFromServer = getIntFromServer() if let intFromServer = intFromServer { let summ = intFromDB + intFromServer return summ } else { return nil } } if let result = summInts() { print(result) }
рдпрд╣ рдХреЛрдб рдЕрдЪреНрдЫрд╛ рд╣реИ, рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рд╕реНрдкрд╖реНрдЯ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдиреАрд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рдмрдЪрд╛рд╡ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдмреЛрдЭрд┐рд▓ рд╣реЛ рдЧрдпрд╛, рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдЬрд╛рдБрдЪ рдХреЗ рдмреАрдЪ рд╣рдорд╛рд░реЗ рдЗрд░рд╛рджреЗ рдХреЛ рд╕рдордЭ рдкрд╛рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд╣рдореЗрдВ рдЕрднреА рднреА рдХреБрдЫ рджреЛ рдирдВрдмрд░реЛрдВ рдХреА рд░рд╛рд╢рд┐ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдВрдЪред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЗ рдкрд╛рд╕ рдПрдХ рдирдХреНрд╢рд╛ рд╡рд┐рдзрд┐ рд╣реИ, рдЬреЛ рд╣рд╛рд╕реНрдХреЗрд▓ рд╕реЗ рд╢рд╛рдпрдж рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИред рд╣рдо рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрджрд╛рд╣рд░рдг рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред
func getIntFromDB() -> Int func getIntFromServer() -> Int? func summInts() -> Int? { let intFromDB = getIntFromDB() let intFromServer = getIntFromServer() return intFromServer.map { x in x + intFromDB } } if let result = summInts() { print(result) }
рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯред
func getIntFromDB() -> Int func getintFromServer() -> Int? func summInts() -> Int? { return getintFromServer().map { $0 + getIntFromDB() } } if let result = summInts() { print(result) }
рд╣рдордиреЗ intFromServer рдХреЛ рдЙрд╕ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХреЗ рдмрд┐рдирд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдордиреЗ рд╕рдорди рдХреЗ рдЕрдВрджрд░ рдЪреЗрдХ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓рд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЧрдгрдирд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреА рдХрдореА рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЙрджреНрдзрд░рдг
if let result = summInts() { print(result) }
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
print(result ?? 0)
рдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред
if let result = summInts() { print(result) } else { print("") }
рдЕрдм рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреЛрдб рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИ, рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рджреВрд╕рд░реЗ рдореЗрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдирдХреНрд╢рд╛ рд╣рдореЗрд╢рд╛ рд╡реИрд╕рд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЙрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
let a: String? = "7" let b = a.map { Int($0) } type(of: b)
рдпрджрд┐ рд╣рдо рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдбрдмрд▓ рд╡реИрдХрд▓реНрдкрд┐рдХ рдорд┐рд▓рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдиреАрд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рджреЛрд╣рд░реЗ рд╕рдВрд░рдХреНрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рд╣реА рдХрд╛рдлреА рд╣реИред рдлреНрд▓реИрдЯрдкрд╛рдЗрдк рд╡рд┐рдзрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдпрд╣ рдПрдХ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рдирдХреНрд╢реЗ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╣реИ, рдпрд╣ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдЧреБрдбрд╝рд┐рдпрд╛ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИред
let a: String? = "7" let b = a.flatMap { Int($0) } type(of: b)
рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдЬрд╣рд╛рдВ рдорд╛рдирдЪрд┐рддреНрд░ рдФрд░ рдлреНрд▓реИрдЯрдкрд╛рдЗрдк рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред
let a: Int? = 3 let b: Int? = 7 let c = a.map { $0 + b! }
рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рджреЛ рддрд░реНрдХ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╡реЗ рджреЛрдиреЛрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВ? рдмреЗрд╢рдХ, рдПрдлрдкреА рдХрд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ - рдпрд╣ рдПрдХ рдРрдкреНрд▓рд┐рдХреЗрдЯрд░ рдлрд╝рдВрдХреНрдЯрд░ рдФрд░ рдХрд░реА рд╣реИред рд▓реЗрдХрд┐рди рдпреЗ рдЙрдкрдХрд░рдг рд╡рд┐рд╢реЗрд╖ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдЬреАрдм рд▓рдЧрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реА рднрд╛рд╖рд╛ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдХрд╕реНрдЯрдо рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рдмреБрд░рд╛ рд░реВрдк рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрдзрд┐рдХ рд╕рд╣рдЬ рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ: рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВред
@discardableResult func perform<Result, U, Z>( _ transform: (U, Z) throws -> Result, _ optional1: U?, _ optional2: Z?) rethrows -> Result? { guard let optional1 = optional1, let optional2 = optional2 else { return nil } return try transform(optional1, optional2) }
рдпрд╣ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рджреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдореВрд▓реНрдпреЛрдВ рдФрд░ рджреЛ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓реЗрддрд╛ рд╣реИред рдпрджрд┐ рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рдорд╛рди рд╣реИрдВ, рддреЛ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдм рд╣рдо рдЙрдиреНрд╣реЗрдВ рддреИрдирд╛рдд рдХрд┐рдП рдмрд┐рдирд╛ рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
let a: Int? = 3 let b: Int? = 7 let result = perform(+, a, b)
рджреВрд╕рд░реЗ рдореЛрдирдб, рд░рд┐рдЬрд▓реНрдЯ рдореЗрдВ рдореИрдк рдФрд░ рдлреНрд▓реИрдЯрдкрд╛рдЗрдк рддрд░реАрдХреЗ рднреА рд╣реИрдВред рддреЛ, рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
func getIntFromDB() -> Int func getIntFromServer() -> Result<Int, ServerError> func summInts() -> Result<Int, ServerError> { let intFromDB = getIntFromDB() let intFromServer = getIntFromServer() return intFromServer.map { x in x + intFromDB } } if case .success(let result) = summInts() { print(result) }
рджрд░рдЕрд╕рд▓, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рднрд┐рдХреНрд╖реБрдУрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд▓рд╛рддрд╛ рд╣реИ - рдХрдВрдЯреЗрдирд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдХреЛрдб рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдмрдирд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рд╕реНрдкрд╖реНрдЯ рдЕрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╣ рдПрдлрдкреА рдкреНрд░рддрд┐рдорд╛рди рдХрд╛ рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг: рдЧрдВрджреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ, рд╡реИрд╢реНрд╡рд┐рдХ рд░рд╛рдЬреНрдп рдФрд░ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣рд░ рдЬрдЧрд╣ рд╣реИрдВ - рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдз, рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд, рдпреВрдЖрдИред рдФрд░ рдХреЗрд╡рд▓ рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рддрд┐рд░рд╕реНрдХреГрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдлрдкреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреБрд░реНрдЧрдо рд╣реИ: рд╣рдо рдЧрдВрджреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдХрдИ рд╣реИрдВред
рдЖрдЗрдП рдЙрддреНрдкрд╛рджрди рд╡рд┐рдХрд╛рд╕ рдХреЗ рдХрд░реАрдм рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦреЗрдВред рдПрдХ рдпреВрдЖрдИ рдмрдирд╛рдПрдБ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдкреНрд░рд╡реЗрд╢ рдлреЙрд░реНрдоред рдкреНрд░рдкрддреНрд░ рдХреА рдХреБрдЫ рд╕реАрдорд╛рдПрдБ рд╣реИрдВ:
1) 3 рдЕрдХреНрд╖рд░реЛрдВ рд╕реЗ рдХрдо рдХрд╛ рд▓реЙрдЧрд┐рди рдХрд░реЗрдВ
2) рдХрдо рд╕реЗ рдХрдо 6 рдЕрдХреНрд╖рд░реЛрдВ рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб
3) "рд▓реЙрдЧрд┐рди" рдмрдЯрди рд╕рдХреНрд░рд┐рдп рд╣реИ рдпрджрд┐ рджреЛрдиреЛрдВ рдлрд╝реАрд▓реНрдб рдорд╛рдиреНрдп рд╣реИрдВред
4) рдлреАрд▓реНрдб рдлреНрд░реЗрдо рдХрд╛ рд░рдВрдЧ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдХрд╛рд▓рд╛ - рд╡реИрдз рд╣реИ, рд▓рд╛рд▓ рд╣реИ - рд╡реИрдз рдирд╣реАрдВ рд╣реИ
рдЗрди рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ:
рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛
@IBAction func textFieldTextDidChange() {
рд▓реЙрдЧ рдЗрди рдкреВрд░реНрдг рдкреНрд░рдХреНрд░рд┐рдпрд╛:
@IBAction func loginDidEndEdit() { let color: CGColor
рдкрд╛рд╕рд╡рд░реНрдб рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛:
@IBAction func passwordDidEndEdit() { let color: CGColor
рдПрдВрдЯрд░ рдмрдЯрди рджрдмрд╛рдирд╛:
@IBAction private func loginPressed() {
рдпрд╣ рдХреЛрдб рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рдЪ рд╣реИ, рдЙрд╕рдХреЗ рдкрд╛рд╕ рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:
- 4 рд╕реНрдкрд╖реНрдЯ рдЕрд░реНрдХ;
- рд╡реИрд╢реНрд╡рд┐рдХ рд░рд╛рдЬреНрдп рдкрд░ 4 рдирд┐рд░реНрднрд░рддрд╛рдПрдВ;
- 8 рджреБрд╖реНрдкреНрд░рднрд╛рд╡;
- рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рдЕрдВрдд рд░рд╛рдЬреНрдп;
- рдЕрдзреВрд░рд╛ рдкреНрд░рд╡рд╛рд╣ред
рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рд╕рд┐рд░реНрдл рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рдХрд┐ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХреМрди, рдХрд╣рд╛рдБ рдФрд░ рдХрдм рд░рд╛рдЬреНрдп рдХреЛ рд╕реНрдкрд░реНрд╢ рдХрд░рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЖрдкрдХреЛ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЗ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкреНрд░рднрд╛рд╡ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдм рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдпрджрд┐ рд░рд╛рдЬреНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд░реИрдЦрд┐рдХ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЪрд░рдг рджрд░ рдЪрд░рдг рдЕрдзреНрдпрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдкрд░ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рднрд╛рд░ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдЖрдЗрдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реЛред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдореЙрдбрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдХреНрд░реАрди рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдХрд┐ рдиреМрдХрд░реА рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЬрд╛рдирдХрд╛рд░реА рдЖрд╡рд╢реНрдпрдХ рд╣реИред
struct LoginOutputModel { let login: String let password: String var loginIsValid: Bool { return login.count > 3 } var passwordIsValid: Bool { return password.count > 6 } var isValid: Bool { return loginIsValid && passwordIsValid } }
рдПрдХ рдореЙрдбрд▓ рдЬреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рд▓рд╛рдЧреВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЙрд╕реЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдмрджрд▓реЗрдВрдЧреЗред
struct LoginInputModel { let loginBorderColor: CGColor? let passwordBorderColor: CGColor? let loginButtonEnable: Bool? let popupErrorMessage: String? }
рдЗрд╡реЗрдВрдЯ рдЬреЛ рдПрдХ рдирдИ рд╕реНрдХреНрд░реАрди рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рд╕реНрдХреНрд░реАрди рдХрд┐рди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрджрд▓рддреА рд╣реИред
enum Event { case textFieldTextDidChange case loginDidEndEdit case passwordDidEndEdit case loginPressed case authFailure(Error) }
рдЕрдм рд╣рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдореБрдЦреНрдп рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╢реБрджреНрдз рдХрд╛рд░реНрдп, рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕реНрдХреНрд░реАрди рдХреА рдПрдХ рдирдИ рд╕реНрдерд┐рддрд┐ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИред
func makeInputModel( event: Event, outputModel: LoginOutputModel?) -> LoginInputModel { switch event { case .textFieldTextDidChange: let mapValidToColor: (Bool) -> CGColor? = { $0 ? normalColor : nil } return LoginInputModel( loginBorderColor: outputModel .map { $0.loginIsValid } .flatMap(mapValidToColor), passwordBorderColor: outputModel .map { $0.passwordIsValid } .flatMap(mapValidToColor), loginButtonEnable: outputModel?.passwordIsValid ) case .loginDidEndEdit: return LoginInputModel() case .passwordDidEndEdit: return LoginInputModel() case .loginPressed: return LoginInputModel() case .authFailure(let error) where error is AuthError: return LoginInputModel() case .authFailure: return LoginInputModel() } }
рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХрдорд╛рддреНрд░ рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рдирдП рд░рд╛рдЬреНрдп рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд╕рдВрд▓рдЧреНрди рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ - рдФрд░ рдпрд╣ рд╕рд╛рдл рд╣реИред рдЗрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдЪрд░рдг рджрд░ рдЪрд░рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рджреЗрдЦреЗрдВ рдХрд┐ рдШрдЯрдирд╛рдПрдБ рд╕реНрдХреНрд░реАрди рдХреЛ рдмрд┐рдВрджреБ A рд╕реЗ рдмрд┐рдВрджреБ B рдореЗрдВ рдХреИрд╕реЗ рдмрджрд▓рддреА рд╣реИрдВред рдпрджрд┐ рдХреБрдЫ рдЯреВрдЯрддрд╛ рд╣реИ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдпрд╣рд╛рдБ рд╣реИред рдФрд░ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ, рдпрд╣ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
var outputModel: LoginOutputModel? { return perform(LoginOutputModel.init, loginView.text, passwordView.text) }
рд╕реНрдХреНрд░реАрди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ "рдЧрдВрджрд╛" рддрд░реАрдХрд╛ рдЬреЛрдбрд╝реЗрдВред
func updateView(_ event: Event) { let inputModel = makeInputModel(event: event, outputModel: outputModel) if let color = inputModel.loginBorderColor { loginView.layer.borderColor = color } if let color = inputModel.passwordBorderColor { passwordView.layer.borderColor = color } if let isEnable = inputModel.loginButtonEnable { loginButton.isEnabled = isEnable } if let error = inputModel.popupErrorMessage { showPopup(error) } }
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЕрджреНрдпрддрди рджреГрд╢реНрдп рд╡рд┐рдзрд┐ рд╕рд╛рдлрд╝ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╕реНрдерд╛рди рд╣реИ рдЬрд╣рд╛рдБ рд╕реНрдХреНрд░реАрди рдЧреБрдг рдмрджрд▓рддреЗ рд╣реИрдВред рдЧрдгрдирд╛ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкрд╣рд▓рд╛ рдФрд░ рдЕрдВрддрд┐рдо рдЖрдЗрдЯрдоред рдФрд░ рдЕрдЧрд░ рдХреБрдЫ рдЧрд▓рдд рд╣реБрдЖ, рддреЛ рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╣реЛрдЧрд╛ред
рдпрд╣ рдХреЗрд╡рд▓ рд╕рд╣реА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд░реВрдкрд╛рдВрддрд░рдг рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред
@IBAction func textFieldTextDidChange() { updateView(.textFieldTextDidChange) } @IBAction func loginDidEndEdit() { updateView(.loginDidEndEdit) } @IBAction func passwordDidEndEdit() { updateView(.passwordDidEndEdit) }
LoginPressed рддрд░реАрдХрд╛ рдереЛрдбрд╝рд╛ рдЕрдиреВрдард╛ рдирд┐рдХрд▓рд╛ред
@IBAction private func loginPressed() { updateView(.loginPressed) let completion: (Result<User, Error>) -> Void = { [weak self] result in switch result { case .success(let user): case .failure(let error): self?.updateView(.authFailure(error)) } } outputModel.map { auth(login: $0.login, password: $0.password, completion: completion) } }
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ "рд▓реЙрдЧрд┐рди" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рдЧрдгрдирд╛ рдХреА рджреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛рдПрдВ рд▓реЙрдиреНрдЪ рд╣реЛрддреА рд╣реИрдВ, рдЬреЛ рдирд┐рд╖рд┐рджреНрдз рдирд╣реАрдВ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдПрдлрдкреА рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рддрд┐рдорд╛рдиреЛрдВ рдкрд░ рдЬреЛрд░ рджрд┐рдпрд╛ред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдерд╛ рдХрд┐ рдХреЛрдб OOP рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рд╕реНрдерд┐рд░ рдХрд╛рд░реНрдп рдпрд╛ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╕рдВрдж рдирд╣реАрдВ рдереЗ, рдореИрдВрдиреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд▓рд┐рдЦреЗ рдереЗред
рдЕрдм рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдПрдХ рдкреНрд░рддрд┐рдорд╛рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдорд╛рдирддрд╛ рдерд╛, рдмрд▓реНрдХрд┐ рдордирдорд╛рдирд╛ рд╣реИред рдореБрдЦреНрдп рдмрд╛рдд рдПрдХ рд╕рд╛рдл, рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдХреЛрдб рд╣реИред рдЗрд╕ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрднрд╡ рд╣реИ: рд╢реБрджреНрдз рдХрд╛рд░реНрдп, рдХрдХреНрд╖рд╛рдПрдВ, рднрд┐рдХреНрд╖реБ, рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо, рд░рдЪрдирд╛, рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ред рд╡реЗ рд╕рднреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдорд┐рд▓рддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рддреЗ рд╣реИрдВ - рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдЬрдЧрд╣ рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
рд╡рд┐рд╖рдп рдкрд░ рдФрд░ рдХреНрдпрд╛ рдкрдврд╝рдирд╛ рд╣реИ
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛
рд╣рд╛рд╕реНрдХреЗрд▓ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдмреБрдХ
рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░ рдлрдВрдХреНрд╢рдирд▓рд░реНрд╕, рдореЛрдирд╛рдбреНрд╕ рдФрд░ рдРрдкреНрд▓рд┐рдХреЗрдЯрд┐рд╡ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛
рд╢рд╛рдпрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдерд╛рдУрдВ рдкрд░ рд╣рд╛рд╕реНрдХреЗрд▓ рдкреБрд╕реНрддрдХ (рд╡реИрдХрд▓реНрдкрд┐рдХ)
рд╕реНрд╡рд┐рдлреНрдЯ рдХреА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░рдХреГрддрд┐ рдкрд░ рдкреБрд╕реНрддрдХ
рдПрдХ рд╡рд┐рдХреА рд╕реЗ рдмреАрдЬреАрдп рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛
рдмреАрдЬреАрдп рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдПрдХ рд▓реЗрдЦ
рдмреАрдЬреАрдп рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдПрдХ рдФрд░ рд▓реЗрдЦ
рд╕реНрд╡рд┐рдлреНрдЯ рдкрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд░ рдпреИрдВрдбреЗрдХреНрд╕ рдХреА рд░рд┐рдкреЛрд░реНрдЯ
рд╕реНрд╡рд┐рдлреНрдЯ рдкрд░ рдкреНрд░рд┐рд▓реНрдпреВрдб рд╕реНрдЯреИрдВрдбрд░реНрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рд╣рд╛рд╕реНрдХреЗрд▓) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛
рд╕реНрд╡рд┐рдлреНрдЯ рдкрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рдкреБрд╕реНрддрдХрд╛рд▓рдп
рдПрдХ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп
рдФрд░ рдПрдХ рдФрд░